From d744b692f5258dbec7426cfcb057ef4db7767ba3 Mon Sep 17 00:00:00 2001
From: Yngrid Coello
Date: Mon, 11 Mar 2024 12:03:37 +0100
Subject: [PATCH 001/100] [Observability onboarding] Applying regex globally
(#177719)
Closes https://github.com/elastic/kibana/issues/177704.
Co-authored-by: Marco Antonio Ghiani
---
.../app/custom_logs/get_filename.test.ts | 30 +++++++++++++++++++
.../app/custom_logs/get_filename.ts | 4 +--
2 files changed, 31 insertions(+), 3 deletions(-)
create mode 100644 x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.test.ts
diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.test.ts b/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.test.ts
new file mode 100644
index 000000000000..deab6c3fcbd8
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.test.ts
@@ -0,0 +1,30 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { getFilename } from './get_filename';
+
+describe('Observability onboarding - get_filename', () => {
+ it.each([
+ ['test', '/logs-onboarding/test.log'],
+ ['test', '/logs-onboarding/test.log'],
+ ['test', 'test.log'],
+ ['test', '/logs-onboarding/long-path/test.log'],
+ ['test', '/logs-onboarding/test.20240223.log'],
+ ['test', 'test'],
+ ['', ''],
+ ['test', '\\logs-onboarding\\test.log'],
+ ['test', "/logs-on'boarding/test.log"],
+ ['te_st', "/logs-on'boarding/te'st.log"],
+ ['test_123', '/logs-onboarding/test 123.log'],
+ ['t_e_s_t_1_2_3_', '/logs-onboarding/t-e%s*t#1@2!3$.log'],
+ ])(
+ 'should return "%s" for filename "%s"',
+ (expectedFilename: string, filePath: string) => {
+ expect(getFilename(filePath)).toBe(expectedFilename);
+ }
+ );
+});
diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.ts b/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.ts
index f5d5d02c0c26..a5bd2b80a2c2 100644
--- a/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.ts
+++ b/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.ts
@@ -10,9 +10,7 @@ export const getFilename = (path?: string) => {
return '';
}
- const filenameWithExt = path
- .replace(/^.*[\\\/](?!\d*$)/, '')
- .replace(/[\\\/]/, '');
+ const filenameWithExt = path.replace(/^.*[\\\/](?!\d*$)/g, '');
const filenameParts = filenameWithExt.split('.');
return replaceSpecialChars(filenameParts[0]);
From aded174f50d7d778744ec17473ef77b258e7ad97 Mon Sep 17 00:00:00 2001
From: Bena Kansara <69037875+benakansara@users.noreply.github.com>
Date: Mon, 11 Mar 2024 12:13:43 +0100
Subject: [PATCH 002/100] [APM] [Alert details page] Fix charts not loading
issue (#178297)
Fixes https://github.com/elastic/kibana/issues/178284
---
.../ui_components/alert_details_app_section/index.tsx | 9 +++------
.../alert_details_app_section/latency_chart.tsx | 2 +-
2 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx
index ad80482d70ff..0296f8dc53d2 100644
--- a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx
+++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx
@@ -44,6 +44,9 @@ export function AlertDetailsAppSection({
timeZone,
setAlertSummaryFields,
}: AlertDetailsAppSectionProps) {
+ const { services } = useKibana();
+ createCallApmApi(services as CoreStart);
+
const alertRuleTypeId = alert.fields[ALERT_RULE_TYPE_ID];
const alertEvaluationValue = alert.fields[ALERT_EVALUATION_VALUE];
const alertEvaluationThreshold = alert.fields[ALERT_EVALUATION_THRESHOLD];
@@ -105,12 +108,6 @@ export function AlertDetailsAppSection({
setAlertSummaryFields,
]);
- const { services } = useKibana();
-
- useEffect(() => {
- createCallApmApi(services as CoreStart);
- }, [services]);
-
const params = rule.params;
const latencyAggregationType = getAggsTypeFromRule(params.aggregationType);
const timeRange = getPaddedAlertTimeRange(
diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx
index 0e1f2ddeb974..a4cd0d5523e5 100644
--- a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx
+++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx
@@ -147,7 +147,7 @@ function LatencyChart({
alertStart={alert.start}
color={euiTheme.colors.danger}
id={'alertActiveRect'}
- key={'alertThresholdRect'}
+ key={'alertActiveRect'}
/>,
Date: Mon, 11 Mar 2024 12:28:34 +0100
Subject: [PATCH 003/100] [Cases] Unskip flaky tests (#178370)
## Summary
This PR unskip below flaky tests to confirm the fix made in
https://github.com/elastic/kibana/pull/177798
Fixes https://github.com/elastic/kibana/issues/174682
Fixes https://github.com/elastic/kibana/issues/176336
Fixes https://github.com/elastic/kibana/issues/177334
Fixes https://github.com/elastic/kibana/issues/171600
Fixes https://github.com/elastic/kibana/issues/171601
Fixes https://github.com/elastic/kibana/issues/177791
Fixes https://github.com/elastic/kibana/issues/177792
Fixes https://github.com/elastic/kibana/issues/177793
Fixes https://github.com/elastic/kibana/issues/177794
Fixes https://github.com/elastic/kibana/issues/177795
Fixes https://github.com/elastic/kibana/issues/177796
Fixes https://github.com/elastic/kibana/issues/171605
Fixes https://github.com/elastic/kibana/issues/171606
Fixes https://github.com/elastic/kibana/issues/171607
Fixes https://github.com/elastic/kibana/issues/171608
Fixes https://github.com/elastic/kibana/issues/178119
Fixes https://github.com/elastic/kibana/issues/174525
Fixes https://github.com/elastic/kibana/issues/174526
Fixes https://github.com/elastic/kibana/issues/174527
Fixes https://github.com/elastic/kibana/issues/174528
Fixes https://github.com/elastic/kibana/issues/146394
Fixes https://github.com/elastic/kibana/issues/176805
Fixes https://github.com/elastic/kibana/issues/175112
Fixes https://github.com/elastic/kibana/issues/176671
Fixes https://github.com/elastic/kibana/issues/176672
Fixes https://github.com/elastic/kibana/issues/175841
Fixes https://github.com/elastic/kibana/issues/174667
Fixes https://github.com/elastic/kibana/issues/174384
Fixes https://github.com/elastic/kibana/issues/175310
### 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
---
.../all_cases/columns_popover.test.tsx | 3 +--
.../all_cases/severity_filter.test.tsx | 3 +--
.../all_cases/status_filter.test.tsx | 3 +--
.../components/suggest_users_popover.test.tsx | 4 +---
.../category/category_form_field.test.tsx | 12 +---------
.../resilient/use_get_incident_types.test.tsx | 3 +--
.../create/flyout/create_case_flyout.test.tsx | 6 +----
.../components/create/form_context.test.tsx | 22 +++++++++++--------
.../components/custom_fields/index.test.tsx | 3 +--
.../custom_fields/toggle/edit.test.tsx | 3 +--
.../edit_connector/push_button.test.tsx | 4 +---
.../components/files/file_type.test.tsx | 3 +--
.../alert_property_actions.test.tsx | 3 +--
...ered_attachments_property_actions.test.tsx | 3 +--
.../user_comment_property_actions.test.tsx | 3 +--
15 files changed, 27 insertions(+), 51 deletions(-)
diff --git a/x-pack/plugins/cases/public/components/all_cases/columns_popover.test.tsx b/x-pack/plugins/cases/public/components/all_cases/columns_popover.test.tsx
index 4d6eb887c86d..27f94319ecbc 100644
--- a/x-pack/plugins/cases/public/components/all_cases/columns_popover.test.tsx
+++ b/x-pack/plugins/cases/public/components/all_cases/columns_popover.test.tsx
@@ -14,8 +14,7 @@ import type { AppMockRenderer } from '../../common/mock';
import { createAppMockRenderer } from '../../common/mock';
import { ColumnsPopover } from './columns_popover';
-// FLAKY: https://github.com/elastic/kibana/issues/174682
-describe.skip('ColumnsPopover', () => {
+describe('ColumnsPopover', () => {
let appMockRenderer: AppMockRenderer;
beforeEach(() => {
diff --git a/x-pack/plugins/cases/public/components/all_cases/severity_filter.test.tsx b/x-pack/plugins/cases/public/components/all_cases/severity_filter.test.tsx
index 66b808dca559..ca09d53501e5 100644
--- a/x-pack/plugins/cases/public/components/all_cases/severity_filter.test.tsx
+++ b/x-pack/plugins/cases/public/components/all_cases/severity_filter.test.tsx
@@ -14,8 +14,7 @@ import { screen, waitFor } from '@testing-library/react';
import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl';
import { SeverityFilter } from './severity_filter';
-// FLAKY: https://github.com/elastic/kibana/issues/176336
-describe.skip('Severity form field', () => {
+describe('Severity form field', () => {
const onChange = jest.fn();
let appMockRender: AppMockRenderer;
const props = {
diff --git a/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx b/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx
index 66e8eca5b078..3dac9d201ced 100644
--- a/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx
+++ b/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx
@@ -19,8 +19,7 @@ const LABELS = {
inProgress: i18n.STATUS_IN_PROGRESS,
};
-// FLAKY: https://github.com/elastic/kibana/issues/177334
-describe.skip('StatusFilter', () => {
+describe('StatusFilter', () => {
const onChange = jest.fn();
const defaultProps = {
selectedOptionKeys: [],
diff --git a/x-pack/plugins/cases/public/components/case_view/components/suggest_users_popover.test.tsx b/x-pack/plugins/cases/public/components/case_view/components/suggest_users_popover.test.tsx
index d84675d8e788..479b8e39d232 100644
--- a/x-pack/plugins/cases/public/components/case_view/components/suggest_users_popover.test.tsx
+++ b/x-pack/plugins/cases/public/components/case_view/components/suggest_users_popover.test.tsx
@@ -18,9 +18,7 @@ import type { AssigneeWithProfile } from '../../user_profiles/types';
jest.mock('../../../containers/user_profiles/api');
-// FLAKY: https://github.com/elastic/kibana/issues/171600
-// FLAKY: https://github.com/elastic/kibana/issues/171601
-describe.skip('SuggestUsersPopover', () => {
+describe('SuggestUsersPopover', () => {
let appMockRender: AppMockRenderer;
let defaultProps: SuggestUsersPopoverProps;
diff --git a/x-pack/plugins/cases/public/components/category/category_form_field.test.tsx b/x-pack/plugins/cases/public/components/category/category_form_field.test.tsx
index d656bdf499eb..cdaae6f49c5c 100644
--- a/x-pack/plugins/cases/public/components/category/category_form_field.test.tsx
+++ b/x-pack/plugins/cases/public/components/category/category_form_field.test.tsx
@@ -16,17 +16,7 @@ import { categories } from '../../containers/mock';
import { MAX_CATEGORY_LENGTH } from '../../../common/constants';
import { FormTestComponent } from '../../common/test_utils';
-// FLAKY: https://github.com/elastic/kibana/issues/177791
-// FLAKY: https://github.com/elastic/kibana/issues/177792
-// FLAKY: https://github.com/elastic/kibana/issues/177793
-// FLAKY: https://github.com/elastic/kibana/issues/177794
-// FLAKY: https://github.com/elastic/kibana/issues/177795
-// FLAKY: https://github.com/elastic/kibana/issues/177796
-// FLAKY: https://github.com/elastic/kibana/issues/171605
-// FLAKY: https://github.com/elastic/kibana/issues/171606
-// FLAKY: https://github.com/elastic/kibana/issues/171607
-// FLAKY: https://github.com/elastic/kibana/issues/171608
-describe.skip('Category', () => {
+describe('Category', () => {
let appMockRender: AppMockRenderer;
const onSubmit = jest.fn();
diff --git a/x-pack/plugins/cases/public/components/connectors/resilient/use_get_incident_types.test.tsx b/x-pack/plugins/cases/public/components/connectors/resilient/use_get_incident_types.test.tsx
index 6430c1b1ff2f..4d7183d9985f 100644
--- a/x-pack/plugins/cases/public/components/connectors/resilient/use_get_incident_types.test.tsx
+++ b/x-pack/plugins/cases/public/components/connectors/resilient/use_get_incident_types.test.tsx
@@ -19,8 +19,7 @@ jest.mock('./api');
const useKibanaMock = useKibana as jest.Mocked;
-// FLAKY: https://github.com/elastic/kibana/issues/178119
-describe.skip('useGetIncidentTypes', () => {
+describe('useGetIncidentTypes', () => {
const { http } = useKibanaMock().services;
let appMockRender: AppMockRenderer;
diff --git a/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.test.tsx b/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.test.tsx
index 90129b373cf7..ae41ae9ac264 100644
--- a/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.test.tsx
+++ b/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.test.tsx
@@ -39,11 +39,7 @@ const defaultProps = {
owner: 'securitySolution',
};
-// FLAKY: https://github.com/elastic/kibana/issues/174525
-// FLAKY: https://github.com/elastic/kibana/issues/174526
-// FLAKY: https://github.com/elastic/kibana/issues/174527
-// FLAKY: https://github.com/elastic/kibana/issues/174528
-describe.skip('CreateCaseFlyout', () => {
+describe('CreateCaseFlyout', () => {
let appMockRenderer: AppMockRenderer;
beforeEach(() => {
diff --git a/x-pack/plugins/cases/public/components/create/form_context.test.tsx b/x-pack/plugins/cases/public/components/create/form_context.test.tsx
index 9b23b46b18e3..7be30aea3d8e 100644
--- a/x-pack/plugins/cases/public/components/create/form_context.test.tsx
+++ b/x-pack/plugins/cases/public/components/create/form_context.test.tsx
@@ -149,8 +149,7 @@ const waitForFormToRender = async (renderer: Screen) => {
});
};
-// Failing: See https://github.com/elastic/kibana/issues/146394
-describe.skip('Create case', () => {
+describe('Create case', () => {
const refetch = jest.fn();
const onFormSubmitSuccess = jest.fn();
const afterCaseCreated = jest.fn();
@@ -466,18 +465,20 @@ describe.skip('Create case', () => {
const textField = customFieldsConfigurationMock[0];
const toggleField = customFieldsConfigurationMock[1];
- expect(screen.getByTestId('create-case-custom-fields')).toBeInTheDocument();
+ expect(await screen.findByTestId('create-case-custom-fields')).toBeInTheDocument();
- userEvent.paste(
- screen.getByTestId(`${textField.key}-${textField.type}-create-custom-field`),
- 'My text test value 1'
+ const textCustomFieldEle = await screen.findByTestId(
+ `${textField.key}-${textField.type}-create-custom-field`
);
+ userEvent.clear(textCustomFieldEle);
+ userEvent.paste(textCustomFieldEle, 'My text test value 1!!');
+
userEvent.click(
- screen.getByTestId(`${toggleField.key}-${toggleField.type}-create-custom-field`)
+ await screen.findByTestId(`${toggleField.key}-${toggleField.type}-create-custom-field`)
);
- userEvent.click(screen.getByTestId('create-case-submit'));
+ userEvent.click(await screen.findByTestId('create-case-submit'));
await waitFor(() => expect(postCase).toHaveBeenCalled());
@@ -485,7 +486,10 @@ describe.skip('Create case', () => {
request: {
...sampleDataWithoutTags,
customFields: [
- ...customFieldsMock,
+ { ...customFieldsMock[0], value: 'My text test value 1!!' },
+ { ...customFieldsMock[1], value: false },
+ { ...customFieldsMock[2] },
+ { ...customFieldsMock[3], value: false },
{
key: 'my_custom_field_key',
type: CustomFieldTypes.TEXT,
diff --git a/x-pack/plugins/cases/public/components/custom_fields/index.test.tsx b/x-pack/plugins/cases/public/components/custom_fields/index.test.tsx
index 4da76d846dd9..15a280716c3c 100644
--- a/x-pack/plugins/cases/public/components/custom_fields/index.test.tsx
+++ b/x-pack/plugins/cases/public/components/custom_fields/index.test.tsx
@@ -17,8 +17,7 @@ import { MAX_CUSTOM_FIELDS_PER_CASE } from '../../../common/constants';
import { CustomFields } from '.';
import * as i18n from './translations';
-// FLAKY: https://github.com/elastic/kibana/issues/176805
-describe.skip('CustomFields', () => {
+describe('CustomFields', () => {
let appMockRender: AppMockRenderer;
const props = {
diff --git a/x-pack/plugins/cases/public/components/custom_fields/toggle/edit.test.tsx b/x-pack/plugins/cases/public/components/custom_fields/toggle/edit.test.tsx
index 84f9547436bd..1af31cf13dd5 100644
--- a/x-pack/plugins/cases/public/components/custom_fields/toggle/edit.test.tsx
+++ b/x-pack/plugins/cases/public/components/custom_fields/toggle/edit.test.tsx
@@ -14,8 +14,7 @@ import { customFieldsMock, customFieldsConfigurationMock } from '../../../contai
import userEvent from '@testing-library/user-event';
import type { CaseCustomFieldToggle } from '../../../../common/types/domain';
-// FLAKY: https://github.com/elastic/kibana/issues/175112
-describe.skip('Edit ', () => {
+describe('Edit ', () => {
const onSubmit = jest.fn();
beforeEach(() => {
diff --git a/x-pack/plugins/cases/public/components/edit_connector/push_button.test.tsx b/x-pack/plugins/cases/public/components/edit_connector/push_button.test.tsx
index d53931d78962..fee6fdc8d155 100644
--- a/x-pack/plugins/cases/public/components/edit_connector/push_button.test.tsx
+++ b/x-pack/plugins/cases/public/components/edit_connector/push_button.test.tsx
@@ -25,9 +25,7 @@ const defaultProps = {
pushToService,
};
-// FLAKY: https://github.com/elastic/kibana/issues/176671
-// FLAKY: https://github.com/elastic/kibana/issues/176672
-describe.skip('PushButton ', () => {
+describe('PushButton ', () => {
let appMockRender: AppMockRenderer;
beforeEach(() => {
diff --git a/x-pack/plugins/cases/public/components/files/file_type.test.tsx b/x-pack/plugins/cases/public/components/files/file_type.test.tsx
index d9c58fd6cab2..6a96870f14cf 100644
--- a/x-pack/plugins/cases/public/components/files/file_type.test.tsx
+++ b/x-pack/plugins/cases/public/components/files/file_type.test.tsx
@@ -17,8 +17,7 @@ import { basicCase, basicFileMock } from '../../containers/mock';
import { getFileType } from './file_type';
import { FILE_ATTACHMENT_TYPE } from '../../../common/constants';
-// Failing: See https://github.com/elastic/kibana/issues/175841
-describe.skip('getFileType', () => {
+describe('getFileType', () => {
const fileType = getFileType();
it('invalid props return blank FileAttachmentViewObject', () => {
diff --git a/x-pack/plugins/cases/public/components/user_actions/property_actions/alert_property_actions.test.tsx b/x-pack/plugins/cases/public/components/user_actions/property_actions/alert_property_actions.test.tsx
index 64dfa08944ea..ac2d1d245b56 100644
--- a/x-pack/plugins/cases/public/components/user_actions/property_actions/alert_property_actions.test.tsx
+++ b/x-pack/plugins/cases/public/components/user_actions/property_actions/alert_property_actions.test.tsx
@@ -17,8 +17,7 @@ import {
} from '../../../common/mock';
import { AlertPropertyActions } from './alert_property_actions';
-// FLAKY: https://github.com/elastic/kibana/issues/174667
-describe.skip('AlertPropertyActions', () => {
+describe('AlertPropertyActions', () => {
let appMock: AppMockRenderer;
const props = {
diff --git a/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx b/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx
index 680139573a13..f0db59b3a682 100644
--- a/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx
+++ b/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx
@@ -18,8 +18,7 @@ import {
import { RegisteredAttachmentsPropertyActions } from './registered_attachments_property_actions';
import { AttachmentActionType } from '../../../client/attachment_framework/types';
-// FLAKY: https://github.com/elastic/kibana/issues/174384
-describe.skip('RegisteredAttachmentsPropertyActions', () => {
+describe('RegisteredAttachmentsPropertyActions', () => {
let appMock: AppMockRenderer;
const props = {
diff --git a/x-pack/plugins/cases/public/components/user_actions/property_actions/user_comment_property_actions.test.tsx b/x-pack/plugins/cases/public/components/user_actions/property_actions/user_comment_property_actions.test.tsx
index c24d26fa3b28..8fc3b0cb8adc 100644
--- a/x-pack/plugins/cases/public/components/user_actions/property_actions/user_comment_property_actions.test.tsx
+++ b/x-pack/plugins/cases/public/components/user_actions/property_actions/user_comment_property_actions.test.tsx
@@ -17,8 +17,7 @@ import {
import { UserCommentPropertyActions } from './user_comment_property_actions';
import { waitFor } from '@testing-library/react';
-// FLAKY: https://github.com/elastic/kibana/issues/175310
-describe.skip('UserCommentPropertyActions', () => {
+describe('UserCommentPropertyActions', () => {
let appMock: AppMockRenderer;
const props = {
From 20a9bf77fa8e2d3a59bf909d3187d57d8cd49df5 Mon Sep 17 00:00:00 2001
From: Ersin Erdal <92688503+ersin-erdal@users.noreply.github.com>
Date: Mon, 11 Mar 2024 14:23:39 +0100
Subject: [PATCH 004/100] Test SubAction schemas (#178204)
Resolves: #177025
I figured out a way to get the SubActions schemas and used it rather
than the suggested way in the issue.
## To verify:
Change one of the SubAction's schema and run the integration test, It
should fail.
---
.../connector_types.test.ts.snap | 31394 ++++++++++++++--
.../integration_tests/connector_types.test.ts | 34 +-
.../sub_action_framework/register.test.ts | 2 +
.../server/sub_action_framework/register.ts | 1 +
x-pack/plugins/actions/server/types.ts | 3 +
5 files changed, 28458 insertions(+), 2976 deletions(-)
diff --git a/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap
index 11624752650e..9b74e91c6eac 100644
--- a/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap
+++ b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap
@@ -10,7 +10,7 @@ Object {
"presence": "optional",
},
"keys": Object {
- "apiUrl": Object {
+ "body": Object {
"flags": Object {
"error": [Function],
},
@@ -24,9 +24,9 @@ Object {
],
"type": "string",
},
- "defaultModel": Object {
+ "model": Object {
"flags": Object {
- "default": "anthropic.claude-v2:1",
+ "default": [Function],
"error": [Function],
"presence": "optional",
},
@@ -60,21 +60,7 @@ Object {
"presence": "optional",
},
"keys": Object {
- "accessKey": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "secret": Object {
+ "dashboardId": Object {
"flags": Object {
"error": [Function],
},
@@ -108,7 +94,7 @@ Object {
"presence": "optional",
},
"keys": Object {
- "subAction": Object {
+ "body": Object {
"flags": Object {
"error": [Function],
},
@@ -122,22 +108,21 @@ Object {
],
"type": "string",
},
- "subActionParams": Object {
+ "model": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
+ "default": [Function],
"error": [Function],
"presence": "optional",
- "unknown": true,
},
- "keys": Object {},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
},
- },
- "type": "object",
+ ],
+ "type": "string",
},
},
"preferences": Object {
@@ -149,7 +134,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .cases-webhook 1`] = `
+exports[`Connector type config checks detect connector type changes for: .bedrock 4`] = `
Object {
"flags": Object {
"default": Object {
@@ -159,155 +144,64 @@ Object {
"presence": "optional",
},
"keys": Object {
- "createCommentJson": Object {
+ "messages": Object {
"flags": Object {
- "default": null,
"error": [Function],
- "presence": "optional",
},
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
+ "items": Array [
Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
},
- "type": "any",
+ "error": [Function],
+ "presence": "optional",
},
- },
- ],
- "type": "alternatives",
- },
- "createCommentMethod": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "default": "put",
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "allow": Array [
- "post",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
+ "keys": Object {
+ "content": Object {
+ "flags": Object {
+ "error": [Function],
},
- Object {
- "schema": Object {
- "allow": Array [
- "put",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "type": "any",
+ "name": "custom",
},
+ ],
+ "type": "string",
+ },
+ "role": Object {
+ "flags": Object {
+ "error": [Function],
},
- Object {
- "schema": Object {
- "allow": Array [
- "patch",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "type": "any",
+ "name": "custom",
},
- },
- ],
- "type": "alternatives",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "createCommentUrl": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
+ ],
+ "type": "string",
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
},
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
},
- "type": "any",
},
+ "type": "object",
},
],
- "type": "alternatives",
+ "type": "array",
},
- "createIncidentJson": Object {
+ "model": Object {
"flags": Object {
+ "default": [Function],
"error": [Function],
+ "presence": "optional",
},
"rules": Array [
Object {
@@ -319,71 +213,117 @@ Object {
],
"type": "string",
},
- "createIncidentMethod": Object {
+ "stopSequences": Object {
"flags": Object {
- "default": "post",
+ "default": [Function],
"error": [Function],
"presence": "optional",
},
- "matches": Array [
+ "items": Array [
Object {
- "schema": Object {
- "allow": Array [
- "post",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
},
- },
- Object {
- "schema": Object {
- "allow": Array [
- "put",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
},
- "type": "any",
- },
+ ],
+ "type": "string",
},
],
- "type": "alternatives",
+ "type": "array",
},
- "createIncidentResponseKey": Object {
+ "temperature": Object {
"flags": Object {
+ "default": [Function],
"error": [Function],
+ "presence": "optional",
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
+ "type": "number",
},
- "createIncidentUrl": Object {
- "flags": Object {
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .bedrock 5`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "messages": Object {
+ "flags": Object {
"error": [Function],
},
- "rules": Array [
+ "items": Array [
Object {
- "args": Object {
- "method": [Function],
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
},
- "name": "custom",
+ "keys": Object {
+ "content": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "role": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
},
],
- "type": "string",
+ "type": "array",
},
- "getIncidentResponseExternalTitleKey": Object {
+ "model": Object {
"flags": Object {
+ "default": [Function],
"error": [Function],
+ "presence": "optional",
},
"rules": Array [
Object {
@@ -395,94 +335,60 @@ Object {
],
"type": "string",
},
- "getIncidentUrl": Object {
+ "stopSequences": Object {
"flags": Object {
+ "default": [Function],
"error": [Function],
+ "presence": "optional",
},
- "rules": Array [
+ "items": Array [
Object {
- "args": Object {
- "method": [Function],
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
},
- "name": "custom",
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
],
- "type": "string",
- },
- "hasAuth": Object {
- "flags": Object {
- "default": true,
- "error": [Function],
- "presence": "optional",
- },
- "type": "boolean",
+ "type": "array",
},
- "headers": Object {
+ "temperature": Object {
"flags": Object {
"default": [Function],
"error": [Function],
"presence": "optional",
},
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "key": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "value": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "name": "entries",
- },
- ],
- "type": "record",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
+ "type": "number",
},
- "updateIncidentJson": Object {
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .bedrock 6`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiUrl": Object {
"flags": Object {
"error": [Function],
},
@@ -496,53 +402,43 @@ Object {
],
"type": "string",
},
- "updateIncidentMethod": Object {
+ "defaultModel": Object {
"flags": Object {
- "default": "put",
+ "default": "anthropic.claude-v2:1",
"error": [Function],
"presence": "optional",
},
- "matches": Array [
- Object {
- "schema": Object {
- "allow": Array [
- "post",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- "patch",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
+ "rules": Array [
Object {
- "schema": Object {
- "allow": Array [
- "put",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
+ "args": Object {
+ "method": [Function],
},
+ "name": "custom",
},
],
- "type": "alternatives",
+ "type": "string",
},
- "updateIncidentUrl": Object {
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .bedrock 7`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "accessKey": Object {
"flags": Object {
"error": [Function],
},
@@ -556,7 +452,7 @@ Object {
],
"type": "string",
},
- "viewIncidentUrl": Object {
+ "secret": Object {
"flags": Object {
"error": [Function],
},
@@ -580,7 +476,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .cases-webhook 2`] = `
+exports[`Connector type config checks detect connector type changes for: .bedrock 8`] = `
Object {
"flags": Object {
"default": Object {
@@ -590,16 +486,67 @@ Object {
"presence": "optional",
},
"keys": Object {
- "password": Object {
+ "subAction": Object {
"flags": Object {
- "default": null,
"error": [Function],
- "presence": "optional",
},
- "matches": Array [
+ "rules": Array [
Object {
- "schema": Object {
- "flags": Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ "unknown": true,
+ },
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .cases-webhook 1`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "createCommentJson": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
"error": [Function],
},
"rules": Array [
@@ -628,7 +575,77 @@ Object {
],
"type": "alternatives",
},
- "user": Object {
+ "createCommentMethod": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": "put",
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "post",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "put",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "patch",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createCommentUrl": Object {
"flags": Object {
"default": null,
"error": [Function],
@@ -666,35 +683,31 @@ Object {
],
"type": "alternatives",
},
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .cases-webhook 3`] = `
-Object {
- "flags": Object {
- "error": [Function],
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "createIncidentJson": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "error": [Function],
- "presence": "optional",
+ "name": "custom",
},
- "keys": Object {
- "subAction": Object {
+ ],
+ "type": "string",
+ },
+ "createIncidentMethod": Object {
+ "flags": Object {
+ "default": "post",
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"allow": Array [
- "pushToService",
+ "post",
],
"flags": Object {
"error": [Function],
@@ -702,393 +715,152 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "put",
+ ],
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
+ "only": true,
},
- "keys": Object {
- "comments": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "items": Array [
- Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "comment": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "commentId": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
- },
- ],
- "type": "array",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "incident": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "description": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "externalId": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "id": Object {
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createIncidentResponseKey": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "createIncidentUrl": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "getIncidentResponseExternalTitleKey": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "getIncidentUrl": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "hasAuth": Object {
+ "flags": Object {
+ "default": true,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "type": "boolean",
+ },
+ "headers": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "key": Object {
"flags": Object {
- "default": null,
"error": [Function],
- "presence": "optional",
},
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
+ "rules": Array [
Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
+ "args": Object {
+ "method": [Function],
},
+ "name": "custom",
},
],
- "type": "alternatives",
+ "type": "string",
},
- "severity": Object {
+ "value": Object {
"flags": Object {
- "default": null,
"error": [Function],
- "presence": "optional",
},
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
+ "rules": Array [
Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
+ "args": Object {
+ "method": [Function],
},
+ "name": "custom",
},
],
- "type": "alternatives",
- },
- "status": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "tags": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "items": Array [
- Object {
- "flags": Object {
- "error": [Function],
- "presence": "optional",
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- ],
- "type": "array",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "title": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "type": "string",
},
},
- "type": "object",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "name": "entries",
},
- },
- "type": "object",
+ ],
+ "type": "record",
},
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
},
- "type": "object",
- },
- },
- ],
- "type": "alternatives",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .d3security 1`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ ],
+ "type": "alternatives",
},
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "url": Object {
+ "updateIncidentJson": Object {
"flags": Object {
"error": [Function],
},
@@ -1102,27 +874,53 @@ Object {
],
"type": "string",
},
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .d3security 2`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "updateIncidentMethod": Object {
+ "flags": Object {
+ "default": "put",
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "post",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "patch",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "put",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
},
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "token": Object {
+ "updateIncidentUrl": Object {
"flags": Object {
"error": [Function],
},
@@ -1136,27 +934,7 @@ Object {
],
"type": "string",
},
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .d3security 3`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "subAction": Object {
+ "viewIncidentUrl": Object {
"flags": Object {
"error": [Function],
},
@@ -1170,23 +948,6 @@ Object {
],
"type": "string",
},
- "subActionParams": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- "unknown": true,
- },
- "keys": Object {},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
- },
},
"preferences": Object {
"stripUnknown": Object {
@@ -1197,7 +958,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .email 1`] = `
+exports[`Connector type config checks detect connector type changes for: .cases-webhook 2`] = `
Object {
"flags": Object {
"default": Object {
@@ -1207,7 +968,7 @@ Object {
"presence": "optional",
},
"keys": Object {
- "clientId": Object {
+ "password": Object {
"flags": Object {
"default": null,
"error": [Function],
@@ -1245,197 +1006,9 @@ Object {
],
"type": "alternatives",
},
- "from": Object {
+ "user": Object {
"flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "hasAuth": Object {
- "flags": Object {
- "default": true,
- "error": [Function],
- "presence": "optional",
- },
- "type": "boolean",
- },
- "host": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "oauthTokenUrl": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "port": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "limit": 1,
- },
- "name": "min",
- },
- Object {
- "args": Object {
- "limit": 65535,
- },
- "name": "max",
- },
- ],
- "type": "number",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "secure": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "type": "boolean",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "service": Object {
- "flags": Object {
- "default": "other",
- "error": [Function],
- "presence": "optional",
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "tenantId": Object {
- "flags": Object {
- "default": null,
+ "default": null,
"error": [Function],
"presence": "optional",
},
@@ -1481,43 +1054,25 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .email 2`] = `
+exports[`Connector type config checks detect connector type changes for: .cases-webhook 3`] = `
Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "clientSecret": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
},
+ "error": [Function],
+ "presence": "optional",
},
- Object {
- "schema": Object {
+ "keys": Object {
+ "subAction": Object {
"allow": Array [
- null,
+ "pushToService",
],
"flags": Object {
"error": [Function],
@@ -1525,426 +1080,369 @@ Object {
},
"type": "any",
},
- },
- ],
- "type": "alternatives",
- },
- "password": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
+ "subActionParams": Object {
"flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
"error": [Function],
+ "presence": "optional",
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "user": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
+ "keys": Object {
+ "comments": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
},
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .email 3`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "bcc": Object {
- "flags": Object {
- "default": Array [],
- "error": [Function],
- "presence": "optional",
- },
- "items": Array [
- Object {
- "flags": Object {
- "error": [Function],
- "presence": "optional",
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- ],
- "type": "array",
- },
- "cc": Object {
- "flags": Object {
- "default": Array [],
- "error": [Function],
- "presence": "optional",
- },
- "items": Array [
- Object {
- "flags": Object {
- "error": [Function],
- "presence": "optional",
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- ],
- "type": "array",
- },
- "kibanaFooterLink": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "path": Object {
- "flags": Object {
- "default": "/",
- "error": [Function],
- "presence": "optional",
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "text": Object {
- "flags": Object {
- "default": "Go to Elastic",
- "error": [Function],
- "presence": "optional",
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "comment": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "commentId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ ],
+ "type": "array",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
},
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
- },
- "message": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "messageHTML": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "subject": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "to": Object {
- "flags": Object {
- "default": Array [],
- "error": [Function],
- "presence": "optional",
- },
- "items": Array [
- Object {
- "flags": Object {
- "error": [Function],
- "presence": "optional",
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- ],
- "type": "array",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .gen-ai 1`] = `
-Object {
- "flags": Object {
- "error": [Function],
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "apiProvider": Object {
- "flags": Object {
- "error": [Function],
- },
- "matches": Array [
- Object {
- "schema": Object {
- "allow": Array [
- "Azure OpenAI",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
+ "incident": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
},
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "apiUrl": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
+ "error": [Function],
+ "presence": "optional",
},
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
- },
- },
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "apiProvider": Object {
- "flags": Object {
- "error": [Function],
- },
- "matches": Array [
- Object {
- "schema": Object {
- "allow": Array [
- "OpenAI",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
+ "keys": Object {
+ "description": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
},
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "apiUrl": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "defaultModel": Object {
- "flags": Object {
- "default": "gpt-4",
- "error": [Function],
- "presence": "optional",
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
+ "externalId": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "id": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "severity": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "status": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "tags": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "title": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
"preferences": Object {
"stripUnknown": Object {
"objects": false,
@@ -1958,7 +1456,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .gen-ai 2`] = `
+exports[`Connector type config checks detect connector type changes for: .d3security 1`] = `
Object {
"flags": Object {
"default": Object {
@@ -1968,9 +1466,11 @@ Object {
"presence": "optional",
},
"keys": Object {
- "apiKey": Object {
+ "body": Object {
"flags": Object {
+ "default": [Function],
"error": [Function],
+ "presence": "optional",
},
"rules": Array [
Object {
@@ -1982,29 +1482,27 @@ Object {
],
"type": "string",
},
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "eventType": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .gen-ai 3`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "subAction": Object {
+ "severity": Object {
"flags": Object {
+ "default": [Function],
"error": [Function],
+ "presence": "optional",
},
"rules": Array [
Object {
@@ -2016,23 +1514,6 @@ Object {
],
"type": "string",
},
- "subActionParams": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- "unknown": true,
- },
- "keys": Object {},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
- },
},
"preferences": Object {
"stripUnknown": Object {
@@ -2043,7 +1524,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .index 1`] = `
+exports[`Connector type config checks detect connector type changes for: .d3security 2`] = `
Object {
"flags": Object {
"default": Object {
@@ -2053,47 +1534,27 @@ Object {
"presence": "optional",
},
"keys": Object {
- "executionTimeField": Object {
+ "body": Object {
"flags": Object {
- "default": null,
+ "default": [Function],
"error": [Function],
"presence": "optional",
},
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
+ "rules": Array [
Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
+ "args": Object {
+ "method": [Function],
},
+ "name": "custom",
},
],
- "type": "alternatives",
+ "type": "string",
},
- "index": Object {
+ "eventType": Object {
"flags": Object {
+ "default": [Function],
"error": [Function],
+ "presence": "optional",
},
"rules": Array [
Object {
@@ -2105,32 +1566,23 @@ Object {
],
"type": "string",
},
- "refresh": Object {
+ "severity": Object {
"flags": Object {
- "default": false,
+ "default": [Function],
"error": [Function],
"presence": "optional",
},
- "type": "boolean",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
},
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .index 2`] = `
-Object {
- "flags": Object {
- "default": Object {},
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {},
"preferences": Object {
"stripUnknown": Object {
"objects": false,
@@ -2140,7 +1592,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .index 3`] = `
+exports[`Connector type config checks detect connector type changes for: .d3security 3`] = `
Object {
"flags": Object {
"default": Object {
@@ -2150,91 +1602,19 @@ Object {
"presence": "optional",
},
"keys": Object {
- "documents": Object {
- "flags": Object {
- "error": [Function],
- },
- "items": Array [
- Object {
- "flags": Object {
- "error": [Function],
- "presence": "optional",
- },
- "rules": Array [
- Object {
- "args": Object {
- "key": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "value": Object {
- "flags": Object {
- "error": [Function],
- },
- "type": "any",
- },
- },
- "name": "entries",
- },
- ],
- "type": "record",
- },
- ],
- "type": "array",
- },
- "indexOverride": Object {
+ "url": Object {
"flags": Object {
- "default": null,
"error": [Function],
- "presence": "optional",
},
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
+ "rules": Array [
Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
+ "args": Object {
+ "method": [Function],
},
+ "name": "custom",
},
],
- "type": "alternatives",
+ "type": "string",
},
},
"preferences": Object {
@@ -2246,7 +1626,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .jira 1`] = `
+exports[`Connector type config checks detect connector type changes for: .d3security 4`] = `
Object {
"flags": Object {
"default": Object {
@@ -2256,21 +1636,7 @@ Object {
"presence": "optional",
},
"keys": Object {
- "apiUrl": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "projectKey": Object {
+ "token": Object {
"flags": Object {
"error": [Function],
},
@@ -2294,7 +1660,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .jira 2`] = `
+exports[`Connector type config checks detect connector type changes for: .d3security 5`] = `
Object {
"flags": Object {
"default": Object {
@@ -2304,7 +1670,7 @@ Object {
"presence": "optional",
},
"keys": Object {
- "apiToken": Object {
+ "subAction": Object {
"flags": Object {
"error": [Function],
},
@@ -2318,19 +1684,22 @@ Object {
],
"type": "string",
},
- "email": Object {
+ "subActionParams": Object {
"flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
"error": [Function],
+ "presence": "optional",
+ "unknown": true,
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
},
- ],
- "type": "string",
+ },
+ "type": "object",
},
},
"preferences": Object {
@@ -2342,70 +1711,103 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .jira 3`] = `
+exports[`Connector type config checks detect connector type changes for: .email 1`] = `
Object {
"flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
"error": [Function],
+ "presence": "optional",
},
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "subAction": Object {
- "allow": Array [
- "getFields",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- "subActionParams": Object {
+ "keys": Object {
+ "clientId": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
},
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
},
- "type": "object",
+ "type": "any",
},
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ ],
+ "type": "alternatives",
+ },
+ "from": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
+ "name": "custom",
},
- "type": "object",
+ ],
+ "type": "string",
+ },
+ "hasAuth": Object {
+ "flags": Object {
+ "default": true,
+ "error": [Function],
+ "presence": "optional",
},
+ "type": "boolean",
},
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "host": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "subAction": Object {
+ Object {
+ "schema": Object {
"allow": Array [
- "getIncident",
+ null,
],
"flags": Object {
"error": [Function],
@@ -2413,59 +1815,37 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
+ },
+ ],
+ "type": "alternatives",
+ },
+ "oauthTokenUrl": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "externalId": Object {
- "flags": Object {
- "error": [Function],
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "name": "custom",
},
- },
- "type": "object",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
- },
- },
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ ],
+ "type": "string",
},
- "error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "subAction": Object {
+ Object {
+ "schema": Object {
"allow": Array [
- "handshake",
+ null,
],
"flags": Object {
"error": [Function],
@@ -2473,44 +1853,73 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
+ },
+ ],
+ "type": "alternatives",
+ },
+ "port": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "rules": Array [
+ Object {
+ "args": Object {
+ "limit": 1,
+ },
+ "name": "min",
},
- },
- "type": "object",
+ Object {
+ "args": Object {
+ "limit": 65535,
+ },
+ "name": "max",
+ },
+ ],
+ "type": "number",
},
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
},
- "type": "object",
- },
+ ],
+ "type": "alternatives",
},
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "secure": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "type": "boolean",
},
- "error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "subAction": Object {
+ Object {
+ "schema": Object {
"allow": Array [
- "pushToService",
+ null,
],
"flags": Object {
"error": [Function],
@@ -2518,182 +1927,4063 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "service": Object {
+ "flags": Object {
+ "default": "other",
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "tenantId": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
"error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "comments": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "items": Array [
- Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "comment": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "commentId": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
- },
- ],
- "type": "array",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
+ "name": "custom",
},
- "incident": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .email 2`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "clientSecret": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "keys": Object {
- "description": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "externalId": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "issueType": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "password": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "user": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .email 3`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "bcc": Object {
+ "flags": Object {
+ "default": Array [],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ "cc": Object {
+ "flags": Object {
+ "default": Array [],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ "kibanaFooterLink": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "path": Object {
+ "flags": Object {
+ "default": "/",
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "text": Object {
+ "flags": Object {
+ "default": "Go to Elastic",
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ "message": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "messageHTML": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "subject": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "to": Object {
+ "flags": Object {
+ "default": Array [],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .gen-ai 1`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "body": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .gen-ai 2`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "body": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .gen-ai 3`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "body": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "stream": Object {
+ "flags": Object {
+ "default": false,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "type": "boolean",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .gen-ai 4`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "dashboardId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .gen-ai 5`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "messages": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "content": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "role": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ ],
+ "type": "array",
+ },
+ "model": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "n": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "type": "number",
+ },
+ "stop": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "temperature": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "type": "number",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .gen-ai 6`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "messages": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "content": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "role": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ ],
+ "type": "array",
+ },
+ "model": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "n": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "type": "number",
+ },
+ "stop": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "temperature": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "type": "number",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .gen-ai 7`] = `
+Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiProvider": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "Azure OpenAI",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "apiUrl": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiProvider": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "OpenAI",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "apiUrl": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "defaultModel": Object {
+ "flags": Object {
+ "default": "gpt-4",
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ ],
+ "type": "alternatives",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .gen-ai 8`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiKey": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .gen-ai 9`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ "unknown": true,
+ },
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .index 1`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "executionTimeField": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "index": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "refresh": Object {
+ "flags": Object {
+ "default": false,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "type": "boolean",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .index 2`] = `
+Object {
+ "flags": Object {
+ "default": Object {},
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .index 3`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "documents": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "key": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "value": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "type": "any",
+ },
+ },
+ "name": "entries",
+ },
+ ],
+ "type": "record",
+ },
+ ],
+ "type": "array",
+ },
+ "indexOverride": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .jira 1`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiUrl": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "projectKey": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .jira 2`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiToken": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "email": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .jira 3`] = `
+Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "getFields",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "getIncident",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "externalId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "handshake",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "pushToService",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "comments": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "comment": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "commentId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ ],
+ "type": "array",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "incident": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "description": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "externalId": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "issueType": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "labels": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "parent": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "priority": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "summary": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "issueTypes",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "fieldsByIssueType",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "id": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "issues",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "title": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "issue",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "id": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ ],
+ "type": "alternatives",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .opsgenie 1`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "actions": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "rules": Array [
+ Object {
+ "args": Object {
+ "limit": 10,
+ },
+ "name": "max",
+ },
+ ],
+ "type": "array",
+ },
+ "alias": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "description": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "details": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "key": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "value": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "name": "entries",
+ },
+ ],
+ "type": "record",
+ },
+ "entity": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "message": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "note": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "priority": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "P1",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "P2",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "P3",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "P4",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "P5",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "responders": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "name": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "type": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "team",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "user",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "escalation",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "schedule",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "id": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "type": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "team",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "user",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "escalation",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "schedule",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "type": Object {
+ "allow": Array [
+ "user",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "username": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ ],
+ "rules": Array [
+ Object {
+ "args": Object {
+ "limit": 50,
+ },
+ "name": "max",
+ },
+ ],
+ "type": "array",
+ },
+ "source": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "tags": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "rules": Array [
+ Object {
+ "args": Object {
+ "limit": 20,
+ },
+ "name": "max",
+ },
+ ],
+ "type": "array",
+ },
+ "user": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "visibleTo": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "name": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "type": Object {
+ "allow": Array [
+ "team",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "id": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "type": Object {
+ "allow": Array [
+ "team",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "id": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "type": Object {
+ "allow": Array [
+ "user",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "type": Object {
+ "allow": Array [
+ "user",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "username": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ ],
+ "rules": Array [
+ Object {
+ "args": Object {
+ "limit": 50,
+ },
+ "name": "max",
+ },
+ ],
+ "type": "array",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .opsgenie 2`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "alias": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "note": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "source": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "user": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .opsgenie 3`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiUrl": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .opsgenie 4`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiKey": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .opsgenie 5`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ "unknown": true,
+ },
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .pagerduty 1`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiUrl": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .pagerduty 2`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "routingKey": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .pagerduty 3`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "class": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "component": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "customDetails": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "key": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "value": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "type": "any",
+ },
+ },
+ "name": "entries",
+ },
+ ],
+ "type": "record",
+ },
+ "dedupKey": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "eventAction": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "trigger",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "resolve",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "acknowledge",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "group": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "links": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "href": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "text": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ ],
+ "type": "array",
+ },
+ "severity": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "critical",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "error",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "warning",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ "info",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "source": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "summary": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "timestamp": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .resilient 1`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiUrl": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "orgId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .resilient 2`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiKeyId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "apiKeySecret": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .resilient 3`] = `
+Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "getFields",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "getIncident",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "externalId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "handshake",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "pushToService",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "comments": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "comment": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "commentId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ ],
+ "type": "array",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "incident": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "description": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
},
"matches": Array [
Object {
@@ -2727,7 +6017,7 @@ Object {
],
"type": "alternatives",
},
- "labels": Object {
+ "externalId": Object {
"flags": Object {
"default": null,
"error": [Function],
@@ -2739,30 +6029,15 @@ Object {
"flags": Object {
"error": [Function],
},
- "items": Array [
+ "rules": Array [
Object {
- "flags": Object {
- "error": [Function],
- "presence": "optional",
+ "args": Object {
+ "method": [Function],
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
+ "name": "custom",
},
],
- "type": "array",
+ "type": "string",
},
},
Object {
@@ -2780,7 +6055,7 @@ Object {
],
"type": "alternatives",
},
- "parent": Object {
+ "incidentTypes": Object {
"flags": Object {
"default": null,
"error": [Function],
@@ -2792,15 +6067,16 @@ Object {
"flags": Object {
"error": [Function],
},
- "rules": Array [
+ "items": Array [
Object {
- "args": Object {
- "method": [Function],
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
},
- "name": "custom",
+ "type": "number",
},
],
- "type": "string",
+ "type": "array",
},
},
Object {
@@ -2818,7 +6094,21 @@ Object {
],
"type": "alternatives",
},
- "priority": Object {
+ "name": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "severityCode": Object {
"flags": Object {
"default": null,
"error": [Function],
@@ -2830,15 +6120,7 @@ Object {
"flags": Object {
"error": [Function],
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
+ "type": "number",
},
},
Object {
@@ -2856,58 +6138,21710 @@ Object {
],
"type": "alternatives",
},
- "summary": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
},
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "incidentTypes",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "subAction": Object {
+ "allow": Array [
+ "severity",
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ "subActionParams": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {},
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ },
+ ],
+ "type": "alternatives",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .sentinelone 1`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "osTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "query": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .sentinelone 2`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ "unknown": true,
+ },
+ "keys": Object {
+ "parentTaskId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .sentinelone 3`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "K8SNodeLabels__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SNodeName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SType__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SVersion__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "accountIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "activeThreats": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "activeThreats__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerMember__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adQuery": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserMember__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentNamespace__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentPodName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentVersions": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentVersionsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "alertIds": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ "appsVulnerabilityStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "appsVulnerabilityStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsRole__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsSecurityGroups__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsSubnetIds__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "azureResourceGroup__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudAccount__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudImage__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudInstanceId__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudInstanceSize__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudLocation__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudNetwork__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudProvider": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudTags__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "clusterName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName__like": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "consoleMigrationStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "consoleMigrationStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "countsFor": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "domains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "domainsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "encryptedApplications": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "externalId__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "externalIp__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filterId": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filteredGroupIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filteredSiteIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "firewallEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "gatewayIp": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "gcpServiceAccount__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "groupIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "hasLocalConfiguration": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "ids": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "infected": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "installerTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "installerTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isActive": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isDecommissioned": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isPendingUninstall": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isUninstalled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isUpToDate": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastLoggedInUserName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationIdsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "machineTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "machineTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "migrationStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "mitigationMode": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "mitigationModeSuspicious": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfaceGatewayMacAddress__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfaceInet__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfacePhysical__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkQuarantineEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "operationalStates": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "operationalStatesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osArch": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osVersion__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "query": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerVersions": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerVersionsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "remoteProfilingStates": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "remoteProfilingStatesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "scanStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "scanStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "scanStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "siteIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatContentHash": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatHidden": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatMitigationStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatRebootRequired": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatResolved": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "userActionsNeeded": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuid": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuid__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuids": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .sentinelone 4`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "K8SNodeLabels__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SNodeName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SType__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SVersion__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "accountIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "activeThreats": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "activeThreats__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerMember__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adQuery": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserMember__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentNamespace__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentPodName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentVersions": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentVersionsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "alertIds": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ "appsVulnerabilityStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "appsVulnerabilityStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsRole__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsSecurityGroups__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsSubnetIds__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "azureResourceGroup__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudAccount__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudImage__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudInstanceId__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudInstanceSize__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudLocation__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudNetwork__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudProvider": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudTags__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "clusterName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName__like": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "consoleMigrationStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "consoleMigrationStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "countsFor": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "domains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "domainsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "encryptedApplications": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "externalId__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "externalIp__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filterId": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filteredGroupIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filteredSiteIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "firewallEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "gatewayIp": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "gcpServiceAccount__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "groupIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "hasLocalConfiguration": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "ids": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "infected": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "installerTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "installerTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isActive": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isDecommissioned": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isPendingUninstall": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isUninstalled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isUpToDate": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastLoggedInUserName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationIdsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "machineTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "machineTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "migrationStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "mitigationMode": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "mitigationModeSuspicious": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfaceGatewayMacAddress__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfaceInet__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfacePhysical__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkQuarantineEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "operationalStates": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "operationalStatesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osArch": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osVersion__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "query": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerVersions": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerVersionsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "remoteProfilingStates": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "remoteProfilingStatesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "scanStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "scanStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "scanStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "siteIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatContentHash": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatHidden": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatMitigationStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatRebootRequired": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatResolved": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "userActionsNeeded": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuid": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuid__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuids": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .sentinelone 5`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "K8SNodeLabels__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SNodeName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SType__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SVersion__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "accountIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "activeThreats": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "activeThreats__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerMember__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adQuery": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserMember__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentNamespace__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentPodName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentVersions": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentVersionsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "alertIds": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ "appsVulnerabilityStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "appsVulnerabilityStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsRole__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsSecurityGroups__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsSubnetIds__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "azureResourceGroup__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudAccount__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudImage__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudInstanceId__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudInstanceSize__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudLocation__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudNetwork__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudProvider": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudTags__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "clusterName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName__like": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "consoleMigrationStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "consoleMigrationStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "countsFor": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "domains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "domainsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "encryptedApplications": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "externalId__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "externalIp__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filterId": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filteredGroupIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filteredSiteIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "firewallEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "gatewayIp": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "gcpServiceAccount__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "groupIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "hasLocalConfiguration": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "ids": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "infected": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "installerTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "installerTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isActive": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isDecommissioned": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isPendingUninstall": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isUninstalled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isUpToDate": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastLoggedInUserName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationIdsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "machineTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "machineTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "migrationStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "mitigationMode": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "mitigationModeSuspicious": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfaceGatewayMacAddress__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfaceInet__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfacePhysical__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkQuarantineEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "operationalStates": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "operationalStatesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osArch": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osVersion__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "query": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerVersions": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerVersionsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "remoteProfilingStates": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "remoteProfilingStatesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "scanStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "scanStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "scanStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "siteIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatContentHash": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatHidden": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatMitigationStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatRebootRequired": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "threatResolved": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "userActionsNeeded": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuid": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuid__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuids": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .sentinelone 6`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "K8SNodeLabels__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SNodeName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SType__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "K8SVersion__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "accountIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "activeThreats": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "activeThreats__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerMember__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adComputerQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adQuery": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserMember__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "adUserQuery__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentNamespace__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentPodName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentVersions": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "agentVersionsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "alertIds": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ "appsVulnerabilityStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "appsVulnerabilityStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsRole__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsSecurityGroups__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "awsSubnetIds__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "azureResourceGroup__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudAccount__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudImage__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudInstanceId__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudInstanceSize__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudLocation__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudNetwork__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudProvider": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cloudTags__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "clusterName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "computerName__like": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "consoleMigrationStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "consoleMigrationStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "coreCount__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "countsFor": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "cpuCount__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "createdAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "decommissionedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "domains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "domainsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "encryptedApplications": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "externalId__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "externalIp__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filterId": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filteredGroupIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "filteredSiteIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "firewallEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "gatewayIp": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "gcpServiceAccount__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "groupIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "hasLocalConfiguration": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "ids": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "infected": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "installerTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "installerTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isActive": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isDecommissioned": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isPendingUninstall": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isUninstalled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "isUpToDate": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastActiveDate__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "lastLoggedInUserName__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationIds": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "locationIdsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "machineTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "machineTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "migrationStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "mitigationMode": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "mitigationModeSuspicious": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfaceGatewayMacAddress__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfaceInet__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkInterfacePhysical__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkQuarantineEnabled": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "networkStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "operationalStates": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "operationalStatesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osArch": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osTypes": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osTypesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "osVersion__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "processName": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "query": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatus": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatuses": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "type": "object",
+ "name": "custom",
},
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerStatusesNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
},
- "type": "object",
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
},
- "type": "object",
- },
+ ],
+ "type": "alternatives",
},
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "rangerVersions": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "subAction": Object {
+ Object {
+ "schema": Object {
"allow": Array [
- "issueTypes",
+ null,
],
"flags": Object {
"error": [Function],
@@ -2915,44 +27849,151 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
+ },
+ ],
+ "type": "alternatives",
+ },
+ "rangerVersionsNin": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
},
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
},
- "type": "object",
+ "type": "any",
},
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
},
- "type": "object",
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
},
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
},
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "registeredAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "subAction": Object {
+ Object {
+ "schema": Object {
"allow": Array [
- "fieldsByIssueType",
+ null,
],
"flags": Object {
"error": [Function],
@@ -2960,59 +28001,37 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "id": Object {
- "flags": Object {
- "error": [Function],
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "name": "custom",
},
- },
- "type": "object",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
- },
- },
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ ],
+ "type": "string",
},
- "error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "subAction": Object {
+ Object {
+ "schema": Object {
"allow": Array [
- "issues",
+ null,
],
"flags": Object {
"error": [Function],
@@ -3020,59 +28039,37 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
+ },
+ ],
+ "type": "alternatives",
+ },
+ "registeredAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "title": Object {
- "flags": Object {
- "error": [Function],
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "name": "custom",
},
- },
- "type": "object",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
- },
- },
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ ],
+ "type": "string",
},
- "error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "subAction": Object {
+ Object {
+ "schema": Object {
"allow": Array [
- "issue",
+ null,
],
"flags": Object {
"error": [Function],
@@ -3080,181 +28077,163 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
+ },
+ ],
+ "type": "alternatives",
+ },
+ "remoteProfilingStates": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "id": Object {
- "flags": Object {
- "error": [Function],
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "name": "custom",
},
- },
- "type": "object",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ ],
+ "type": "string",
},
},
- "type": "object",
- },
- },
- ],
- "type": "alternatives",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .opsgenie 1`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "apiUrl": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
- "name": "custom",
},
],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .opsgenie 2`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "type": "alternatives",
},
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "apiKey": Object {
+ "remoteProfilingStatesNin": Object {
"flags": Object {
+ "default": null,
"error": [Function],
+ "presence": "optional",
},
- "rules": Array [
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
- "name": "custom",
},
],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .opsgenie 3`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "type": "alternatives",
},
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "subAction": Object {
+ "scanStatus": Object {
"flags": Object {
+ "default": null,
"error": [Function],
+ "presence": "optional",
},
- "rules": Array [
+ "matches": Array [
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
- "name": "custom",
},
],
- "type": "string",
+ "type": "alternatives",
},
- "subActionParams": Object {
+ "scanStatuses": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
+ "default": null,
"error": [Function],
"presence": "optional",
- "unknown": true,
},
- "keys": Object {},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
},
- },
- "type": "object",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .pagerduty 1`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
},
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "apiUrl": Object {
+ "scanStatusesNin": Object {
"flags": Object {
"default": null,
"error": [Function],
@@ -3292,172 +28271,223 @@ Object {
],
"type": "alternatives",
},
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .pagerduty 2`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "routingKey": Object {
+ "siteIds": Object {
"flags": Object {
+ "default": null,
"error": [Function],
+ "presence": "optional",
},
- "rules": Array [
+ "matches": Array [
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
- "name": "custom",
},
],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .pagerduty 3`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "type": "alternatives",
},
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "class": Object {
+ "threatContentHash": Object {
"flags": Object {
- "default": [Function],
+ "default": null,
"error": [Function],
"presence": "optional",
},
- "rules": Array [
+ "matches": Array [
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
- "name": "custom",
},
],
- "type": "string",
+ "type": "alternatives",
},
- "component": Object {
+ "threatCreatedAt__between": Object {
"flags": Object {
- "default": [Function],
+ "default": null,
"error": [Function],
"presence": "optional",
},
- "rules": Array [
+ "matches": Array [
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
- "name": "custom",
},
],
- "type": "string",
+ "type": "alternatives",
},
- "customDetails": Object {
+ "threatCreatedAt__gt": Object {
"flags": Object {
- "default": [Function],
+ "default": null,
"error": [Function],
"presence": "optional",
},
- "rules": Array [
+ "matches": Array [
Object {
- "args": Object {
- "key": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
},
- "value": Object {
- "flags": Object {
- "error": [Function],
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
},
- "type": "any",
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
},
+ "type": "any",
},
- "name": "entries",
},
],
- "type": "record",
+ "type": "alternatives",
},
- "dedupKey": Object {
+ "threatCreatedAt__gte": Object {
"flags": Object {
- "default": [Function],
+ "default": null,
"error": [Function],
"presence": "optional",
},
- "rules": Array [
+ "matches": Array [
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "name": "custom",
},
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
- "name": "custom",
},
],
- "type": "string",
+ "type": "alternatives",
},
- "eventAction": Object {
+ "threatCreatedAt__lt": Object {
"flags": Object {
- "default": [Function],
+ "default": null,
"error": [Function],
"presence": "optional",
},
"matches": Array [
Object {
"schema": Object {
- "allow": Array [
- "trigger",
- ],
"flags": Object {
"error": [Function],
- "only": true,
},
- "type": "any",
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
},
Object {
"schema": Object {
"allow": Array [
- "resolve",
+ null,
],
"flags": Object {
"error": [Function],
@@ -3466,10 +28496,36 @@ Object {
"type": "any",
},
},
+ ],
+ "type": "alternatives",
+ },
+ "threatCreatedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
Object {
"schema": Object {
"allow": Array [
- "acknowledge",
+ null,
],
"flags": Object {
"error": [Function],
@@ -3481,100 +28537,109 @@ Object {
],
"type": "alternatives",
},
- "group": Object {
+ "threatHidden": Object {
"flags": Object {
- "default": [Function],
+ "default": null,
"error": [Function],
"presence": "optional",
},
- "rules": Array [
+ "matches": Array [
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
- "name": "custom",
},
],
- "type": "string",
+ "type": "alternatives",
},
- "links": Object {
+ "threatMitigationStatus": Object {
"flags": Object {
- "default": [Function],
+ "default": null,
"error": [Function],
"presence": "optional",
},
- "items": Array [
+ "matches": Array [
Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
},
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "href": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- ],
- "type": "string",
- },
- "text": Object {
- "flags": Object {
- "error": [Function],
+ "name": "custom",
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
+ ],
+ "type": "string",
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
},
+ "type": "any",
},
- "type": "object",
},
],
- "type": "array",
+ "type": "alternatives",
},
- "severity": Object {
+ "threatRebootRequired": Object {
"flags": Object {
- "default": [Function],
+ "default": null,
"error": [Function],
"presence": "optional",
},
"matches": Array [
Object {
"schema": Object {
- "allow": Array [
- "critical",
- ],
"flags": Object {
"error": [Function],
- "only": true,
},
- "type": "any",
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
},
Object {
"schema": Object {
"allow": Array [
- "error",
+ null,
],
"flags": Object {
"error": [Function],
@@ -3583,22 +28648,36 @@ Object {
"type": "any",
},
},
+ ],
+ "type": "alternatives",
+ },
+ "threatResolved": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
Object {
"schema": Object {
- "allow": Array [
- "warning",
- ],
"flags": Object {
"error": [Function],
- "only": true,
},
- "type": "any",
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
},
Object {
"schema": Object {
"allow": Array [
- "info",
+ null,
],
"flags": Object {
"error": [Function],
@@ -3610,193 +28689,109 @@ Object {
],
"type": "alternatives",
},
- "source": Object {
- "flags": Object {
- "default": [Function],
- "error": [Function],
- "presence": "optional",
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "summary": Object {
+ "totalMemory__between": Object {
"flags": Object {
- "default": [Function],
+ "default": null,
"error": [Function],
"presence": "optional",
},
- "rules": Array [
+ "matches": Array [
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "name": "custom",
},
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
- "name": "custom",
},
],
- "type": "string",
+ "type": "alternatives",
},
- "timestamp": Object {
+ "totalMemory__gt": Object {
"flags": Object {
- "default": [Function],
+ "default": null,
"error": [Function],
"presence": "optional",
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .resilient 1`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "apiUrl": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "orgId": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
+ "matches": Array [
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "name": "custom",
},
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .resilient 2`] = `
-Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "apiKeyId": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
Object {
- "args": Object {
- "method": [Function],
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
- "name": "custom",
},
],
- "type": "string",
+ "type": "alternatives",
},
- "apiKeySecret": Object {
+ "totalMemory__gte": Object {
"flags": Object {
+ "default": null,
"error": [Function],
+ "presence": "optional",
},
- "rules": Array [
+ "matches": Array [
Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
-}
-`;
-
-exports[`Connector type config checks detect connector type changes for: .resilient 3`] = `
-Object {
- "flags": Object {
- "error": [Function],
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "subAction": Object {
+ Object {
+ "schema": Object {
"allow": Array [
- "getFields",
+ null,
],
"flags": Object {
"error": [Function],
@@ -3804,44 +28799,37 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
},
- },
- "type": "object",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
- },
- },
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ ],
+ "type": "string",
},
- "error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "subAction": Object {
+ Object {
+ "schema": Object {
"allow": Array [
- "getIncident",
+ null,
],
"flags": Object {
"error": [Function],
@@ -3849,59 +28837,75 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
+ },
+ ],
+ "type": "alternatives",
+ },
+ "totalMemory__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "externalId": Object {
- "flags": Object {
- "error": [Function],
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "name": "custom",
},
- },
- "type": "object",
+ ],
+ "type": "string",
},
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
},
- "type": "object",
- },
+ ],
+ "type": "alternatives",
},
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "updatedAt__between": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "subAction": Object {
+ Object {
+ "schema": Object {
"allow": Array [
- "handshake",
+ null,
],
"flags": Object {
"error": [Function],
@@ -3909,44 +28913,75 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__gt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
},
- },
- "type": "object",
+ ],
+ "type": "string",
},
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
},
},
- "type": "object",
- },
+ ],
+ "type": "alternatives",
},
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "updatedAt__gte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "subAction": Object {
+ Object {
+ "schema": Object {
"allow": Array [
- "pushToService",
+ null,
],
"flags": Object {
"error": [Function],
@@ -3954,381 +28989,532 @@ Object {
},
"type": "any",
},
- "subActionParams": Object {
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__lt": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
"flags": Object {
- "default": Object {
- "special": "deep",
- },
"error": [Function],
- "presence": "optional",
},
- "keys": Object {
- "comments": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "items": Array [
- Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "comment": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "commentId": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
- },
- "type": "object",
- },
- ],
- "type": "array",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "incident": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
- },
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "description": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "externalId": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "incidentTypes": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "items": Array [
- Object {
- "flags": Object {
- "error": [Function],
- "presence": "optional",
- },
- "type": "number",
- },
- ],
- "type": "array",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
- "name": Object {
- "flags": Object {
- "error": [Function],
- },
- "rules": Array [
- Object {
- "args": Object {
- "method": [Function],
- },
- "name": "custom",
- },
- ],
- "type": "string",
- },
- "severityCode": Object {
- "flags": Object {
- "default": null,
- "error": [Function],
- "presence": "optional",
- },
- "matches": Array [
- Object {
- "schema": Object {
- "flags": Object {
- "error": [Function],
- },
- "type": "number",
- },
- },
- Object {
- "schema": Object {
- "allow": Array [
- null,
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
- },
- "type": "any",
- },
- },
- ],
- "type": "alternatives",
- },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
- },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "updatedAt__lte": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "type": "object",
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "userActionsNeeded": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuid": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuid__contains": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ "uuids": Object {
+ "flags": Object {
+ "default": null,
+ "error": [Function],
+ "presence": "optional",
+ },
+ "matches": Array [
+ Object {
+ "schema": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ Object {
+ "schema": Object {
+ "allow": Array [
+ null,
+ ],
+ "flags": Object {
+ "error": [Function],
+ "only": true,
+ },
+ "type": "any",
+ },
+ },
+ ],
+ "type": "alternatives",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .sentinelone 7`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "alertIds": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "items": Array [
+ Object {
+ "flags": Object {
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ ],
+ "type": "array",
+ },
+ "computerName": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "script": Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "apiKey": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
+ "name": "custom",
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ ],
+ "type": "string",
+ },
+ "inputParams": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
+ "name": "custom",
},
- "type": "object",
- },
+ ],
+ "type": "string",
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "outputDirectory": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
},
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "type": "object",
- },
- },
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "password": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
},
- "error": [Function],
- "presence": "optional",
- },
- "keys": Object {
- "subAction": Object {
- "allow": Array [
- "incidentTypes",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
},
- "type": "any",
+ ],
+ "type": "string",
+ },
+ "passwordFromScope": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
},
- "subActionParams": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "keys": Object {
+ "scopeId": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
},
- "error": [Function],
- "presence": "optional",
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "keys": Object {},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "scopeLevel": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
},
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "type": "object",
},
- },
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
},
+ "type": "object",
},
- "type": "object",
- },
- },
- Object {
- "schema": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "requiresApproval": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
},
- "error": [Function],
- "presence": "optional",
+ "type": "boolean",
},
- "keys": Object {
- "subAction": Object {
- "allow": Array [
- "severity",
- ],
- "flags": Object {
- "error": [Function],
- "only": true,
+ "scriptId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
},
- "type": "any",
+ ],
+ "type": "string",
+ },
+ "scriptName": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
},
- "subActionParams": Object {
- "flags": Object {
- "default": Object {
- "special": "deep",
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
- "error": [Function],
- "presence": "optional",
+ "name": "custom",
},
- "keys": Object {},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ ],
+ "type": "string",
+ },
+ "scriptRuntimeTimeoutSeconds": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "type": "number",
+ },
+ "singularityxdrKeyword": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
},
+ "name": "custom",
},
- "type": "object",
+ ],
+ "type": "string",
+ },
+ "singularityxdrUrl": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
},
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
},
- "preferences": Object {
- "stripUnknown": Object {
- "objects": false,
+ "taskDescription": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
},
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
},
- "type": "object",
},
+ "type": "object",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
},
- ],
- "type": "alternatives",
+ },
+ "type": "object",
}
`;
-exports[`Connector type config checks detect connector type changes for: .sentinelone 1`] = `
+exports[`Connector type config checks detect connector type changes for: .sentinelone 8`] = `
Object {
"flags": Object {
"default": Object {
@@ -4362,7 +29548,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .sentinelone 2`] = `
+exports[`Connector type config checks detect connector type changes for: .sentinelone 9`] = `
Object {
"flags": Object {
"default": Object {
@@ -4396,7 +29582,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .sentinelone 3`] = `
+exports[`Connector type config checks detect connector type changes for: .sentinelone 10`] = `
Object {
"flags": Object {
"default": Object {
@@ -10068,6 +35254,270 @@ Object {
`;
exports[`Connector type config checks detect connector type changes for: .tines 1`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "storyId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "type": "number",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .tines 2`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "body": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "webhook": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "id": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "type": "number",
+ },
+ "name": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "path": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "secret": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "storyId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "type": "number",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ "webhookUrl": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .tines 3`] = `
+Object {
+ "flags": Object {
+ "default": Object {
+ "special": "deep",
+ },
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "body": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "webhook": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "keys": Object {
+ "id": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "type": "number",
+ },
+ "name": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "path": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "secret": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ "storyId": Object {
+ "flags": Object {
+ "error": [Function],
+ },
+ "type": "number",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+ },
+ "webhookUrl": Object {
+ "flags": Object {
+ "default": [Function],
+ "error": [Function],
+ "presence": "optional",
+ },
+ "rules": Array [
+ Object {
+ "args": Object {
+ "method": [Function],
+ },
+ "name": "custom",
+ },
+ ],
+ "type": "string",
+ },
+ },
+ "preferences": Object {
+ "stripUnknown": Object {
+ "objects": false,
+ },
+ },
+ "type": "object",
+}
+`;
+
+exports[`Connector type config checks detect connector type changes for: .tines 4`] = `
Object {
"flags": Object {
"default": Object {
@@ -10101,7 +35551,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .tines 2`] = `
+exports[`Connector type config checks detect connector type changes for: .tines 5`] = `
Object {
"flags": Object {
"default": Object {
@@ -10149,7 +35599,7 @@ Object {
}
`;
-exports[`Connector type config checks detect connector type changes for: .tines 3`] = `
+exports[`Connector type config checks detect connector type changes for: .tines 6`] = `
Object {
"flags": Object {
"default": Object {
diff --git a/x-pack/plugins/actions/server/integration_tests/connector_types.test.ts b/x-pack/plugins/actions/server/integration_tests/connector_types.test.ts
index 6a2382ea3088..32f878e87506 100644
--- a/x-pack/plugins/actions/server/integration_tests/connector_types.test.ts
+++ b/x-pack/plugins/actions/server/integration_tests/connector_types.test.ts
@@ -9,6 +9,9 @@ import type { TestElasticsearchUtils, TestKibanaUtils } from '@kbn/core-test-hel
import { ActionTypeRegistry } from '../action_type_registry';
import { setupTestServers } from './lib';
import { connectorTypes } from './mocks/connector_types';
+import { actionsConfigMock } from '../actions_config.mock';
+import { loggerMock } from '@kbn/logging-mocks';
+import { Services } from '../types';
jest.mock('../action_type_registry', () => {
const actual = jest.requireActual('../action_type_registry');
@@ -50,11 +53,34 @@ describe('Connector type config checks', () => {
for (const connectorTypeId of connectorTypes) {
test(`detect connector type changes for: ${connectorTypeId}`, async () => {
- const connectorType = actionTypeRegistry.get(connectorTypeId);
+ const {
+ getService,
+ validate: { config, params, secrets },
+ } = actionTypeRegistry.get(connectorTypeId);
- expect(connectorType?.validate.config.schema.getSchema!().describe()).toMatchSnapshot();
- expect(connectorType.validate.secrets.schema.getSchema!().describe()).toMatchSnapshot();
- expect(connectorType.validate.params.schema.getSchema!().describe()).toMatchSnapshot();
+ // SubActionConnector
+ if (getService) {
+ const subActions = getService({
+ config: {},
+ configurationUtilities: actionsConfigMock.create(),
+ connector: { id: 'foo', type: 'bar' },
+ logger: loggerMock.create(),
+ secrets: {},
+ services: {} as Services,
+ }).getSubActions();
+
+ subActions.forEach((subAction) => {
+ // @ts-ignore
+ if (subAction.schema?.getSchema) {
+ // @ts-ignore
+ expect(subAction.schema.getSchema().describe()).toMatchSnapshot();
+ }
+ });
+ }
+
+ expect(config.schema.getSchema!().describe()).toMatchSnapshot();
+ expect(secrets.schema.getSchema!().describe()).toMatchSnapshot();
+ expect(params.schema.getSchema!().describe()).toMatchSnapshot();
});
}
});
diff --git a/x-pack/plugins/actions/server/sub_action_framework/register.test.ts b/x-pack/plugins/actions/server/sub_action_framework/register.test.ts
index 59e71ffb69bf..200b9619eaef 100644
--- a/x-pack/plugins/actions/server/sub_action_framework/register.test.ts
+++ b/x-pack/plugins/actions/server/sub_action_framework/register.test.ts
@@ -60,6 +60,7 @@ describe('Registration', () => {
supportedFeatureIds: connector.supportedFeatureIds,
validate: expect.anything(),
executor: expect.any(Function),
+ getService: expect.any(Function),
renderParameterTemplates: expect.any(Function),
});
});
@@ -99,6 +100,7 @@ describe('Registration', () => {
supportedFeatureIds: connector.supportedFeatureIds,
validate: expect.anything(),
executor: expect.any(Function),
+ getService: expect.any(Function),
renderParameterTemplates: expect.any(Function),
isSystemActionType: true,
});
diff --git a/x-pack/plugins/actions/server/sub_action_framework/register.ts b/x-pack/plugins/actions/server/sub_action_framework/register.ts
index 0b8fe240c155..bfe2c5fffbbf 100644
--- a/x-pack/plugins/actions/server/sub_action_framework/register.ts
+++ b/x-pack/plugins/actions/server/sub_action_framework/register.ts
@@ -41,5 +41,6 @@ export const register = string[];
renderParameterTemplates?: RenderParameterTemplates;
executor: ExecutorType;
+ getService?: (params: ServiceParams) => SubActionConnector;
}
export interface RawAction extends Record {
From f034f869dea0f9eae1b9994c713a40aa4b7e1a74 Mon Sep 17 00:00:00 2001
From: Nicolas Chaulet
Date: Mon, 11 Mar 2024 10:10:11 -0400
Subject: [PATCH 005/100] [Fleet] Add fleet subfeatures (#178006)
---
.../fleet/common/experimental_features.ts | 1 +
x-pack/plugins/fleet/server/plugin.ts | 111 +++++++++++++++++-
2 files changed, 111 insertions(+), 1 deletion(-)
diff --git a/x-pack/plugins/fleet/common/experimental_features.ts b/x-pack/plugins/fleet/common/experimental_features.ts
index 12fd08963692..8271f0403bed 100644
--- a/x-pack/plugins/fleet/common/experimental_features.ts
+++ b/x-pack/plugins/fleet/common/experimental_features.ts
@@ -27,6 +27,7 @@ export const allowedExperimentalValues = Object.freeze>(
remoteESOutput: true,
agentless: false,
enableStrictKQLValidation: false,
+ subfeaturePrivileges: false,
});
type ExperimentalConfigKeys = Array;
diff --git a/x-pack/plugins/fleet/server/plugin.ts b/x-pack/plugins/fleet/server/plugin.ts
index 666aa0848334..1beeb11c590e 100644
--- a/x-pack/plugins/fleet/server/plugin.ts
+++ b/x-pack/plugins/fleet/server/plugin.ts
@@ -289,6 +289,7 @@ export class FleetPlugin
registerSavedObjects(core.savedObjects);
registerEncryptedSavedObjects(deps.encryptedSavedObjects);
+ const experimentalFeatures = parseExperimentalConfigValue(config.enableExperimental ?? []);
// Register feature
if (deps.features) {
deps.features.registerKibanaFeature({
@@ -318,6 +319,115 @@ export class FleetPlugin
},
],
},
+ subFeatures: experimentalFeatures.subfeaturePrivileges
+ ? [
+ {
+ name: 'Agents',
+ requireAllSpaces: true,
+ privilegeGroups: [
+ {
+ groupType: 'mutually_exclusive',
+ privileges: [
+ {
+ id: `${PLUGIN_ID}-agents-all`,
+ api: [`${PLUGIN_ID}-agents-read`, `${PLUGIN_ID}-agents-all`],
+ name: 'All',
+ ui: ['read', 'all'],
+ savedObject: {
+ all: [],
+ read: allSavedObjectTypes,
+ },
+ includeIn: 'all',
+ },
+ {
+ id: `${PLUGIN_ID}-agents-read`,
+ api: [`${PLUGIN_ID}-agents-read`],
+ name: 'Read',
+ ui: ['read'],
+ savedObject: {
+ all: [],
+ read: allSavedObjectTypes,
+ },
+ includeIn: 'read',
+ alerting: {},
+ },
+ ],
+ },
+ ],
+ },
+ {
+ name: 'Agent policies',
+ requireAllSpaces: true,
+ privilegeGroups: [
+ {
+ groupType: 'mutually_exclusive',
+ privileges: [
+ {
+ id: `${PLUGIN_ID}-agent-policies-all`,
+ api: [
+ `${PLUGIN_ID}-agent-policies-read`,
+ `${PLUGIN_ID}-agent-policies-all`,
+ ],
+ name: 'All',
+ ui: ['read', 'all'],
+ savedObject: {
+ all: [],
+ read: allSavedObjectTypes,
+ },
+ includeIn: 'all',
+ },
+ {
+ id: `${PLUGIN_ID}-agent-policies-read`,
+ api: [`${PLUGIN_ID}-agent-policies-read`],
+ name: 'Read',
+ ui: ['read'],
+ savedObject: {
+ all: [],
+ read: allSavedObjectTypes,
+ },
+ includeIn: 'read',
+ alerting: {},
+ },
+ ],
+ },
+ ],
+ },
+ {
+ name: 'Settings',
+ requireAllSpaces: true,
+ privilegeGroups: [
+ {
+ groupType: 'mutually_exclusive',
+ privileges: [
+ {
+ id: `${PLUGIN_ID}-settings-all`,
+ api: [`${PLUGIN_ID}-settings-read`, `${PLUGIN_ID}-settings-all`],
+ name: 'All',
+ ui: ['read', 'all'],
+ savedObject: {
+ all: [],
+ read: allSavedObjectTypes,
+ },
+ includeIn: 'all',
+ },
+ {
+ id: `${PLUGIN_ID}-settings-read`,
+ api: [`${PLUGIN_ID}-settings-read`],
+ name: 'Read',
+ ui: ['read'],
+ savedObject: {
+ all: [],
+ read: allSavedObjectTypes,
+ },
+ includeIn: 'read',
+ alerting: {},
+ },
+ ],
+ },
+ ],
+ },
+ ]
+ : [],
privileges: {
all: {
api: [`${PLUGIN_ID}-read`, `${PLUGIN_ID}-all`],
@@ -340,7 +450,6 @@ export class FleetPlugin
read: allSavedObjectTypes,
},
ui: ['read'],
- disabled: true,
},
},
});
From 6f3c5ee2c188a6f849d3740d9d04271c64f2ef2e Mon Sep 17 00:00:00 2001
From: Tim Grein
Date: Mon, 11 Mar 2024 15:12:27 +0100
Subject: [PATCH 006/100] [Search] Do not show delete index option in the
crawler deletion modal (#178229)
---
.../connectors/delete_connector_modal.tsx | 49 +++++++++++++------
1 file changed, 34 insertions(+), 15 deletions(-)
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/delete_connector_modal.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/delete_connector_modal.tsx
index a83b29fc0502..d696f4cdb85a 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/delete_connector_modal.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/delete_connector_modal.tsx
@@ -68,7 +68,7 @@ export const DeleteConnectorModal: React.FC = ({ isCr
onConfirm={() => {
deleteConnector({
connectorId,
- shouldDeleteIndex,
+ shouldDeleteIndex: isCrawler ? true : shouldDeleteIndex,
});
}}
cancelButtonText={
@@ -127,21 +127,40 @@ export const DeleteConnectorModal: React.FC = ({ isCr
-
-
- {connectorName}
-
- ),
- }}
- />
-
+ {isCrawler && (
+ <>
+
+
+ {connectorName}
+
+ ),
+ }}
+ />
+
+ >
+ )}
+ {!isCrawler && (
+
+
+ {connectorName}
+
+ ),
+ }}
+ />
+
+ )}
- {deleteModalIndexName && (
+ {deleteModalIndexName && !isCrawler && (
<>
Date: Mon, 11 Mar 2024 15:12:45 +0100
Subject: [PATCH 007/100] [Search] Make index name to delete bold and red
(#178243)
---
.../search_indices/delete_index_modal.tsx | 25 ++++++++++++-------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/delete_index_modal.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/delete_index_modal.tsx
index 38875821aecc..11574f611574 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/delete_index_modal.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/delete_index_modal.tsx
@@ -16,9 +16,12 @@ import {
EuiForm,
EuiFormRow,
EuiSpacer,
+ EuiText,
+ EuiTextColor,
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
+import { FormattedMessage } from '@kbn/i18n-react';
import { ingestionMethodToText } from '../../utils/indices';
@@ -112,15 +115,19 @@ export const DeleteIndexModal: React.FC = () => {
>
)}
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.searchIndices.deleteModal.syncsWarning.indexNameDescription',
- {
- defaultMessage: 'This action cannot be undone. Please type {indexName} to confirm.',
- values: { indexName },
- }
- )}
-
+
+
+ {indexName}
+
+ ),
+ }}
+ />
+
Date: Mon, 11 Mar 2024 15:21:15 +0100
Subject: [PATCH 008/100] [Cloud Security] add GCP support for agentless
(#177965)
## Summary
Part of:
- https://github.com/elastic/security-team/issues/8040
Adding support for GCP for Agentless. Specifics:
- only JSON blob credentials type is supported
- in contrast to Agent-based, in "GCP organisation" option there is no
need to provide to `Project ID` field as it's not required for Agentless
## Screencast
[screencast-github.com-2024.03.07-10_25_43.webm](https://github.com/elastic/kibana/assets/478762/cae1483c-20de-48f5-9814-b6510c1482da)
## how to test
The simplest way is to deploy the Kibana image built for this PR to dev
MKI env, following this documentation
https://docs.elastic.dev/kibana-dev-docs/serverless/custom-kibana-image-on-serverless
I tested both Org and Single Account set up with real credentials of
Cloud Security Google Cloud account, got findings in the dev MKI
environments
### 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
---
.../gcp_credential_form.tsx | 33 +++---
.../gcp_credentials_form_agentless.tsx | 62 ++++++++++
.../components/fleet_extensions/mocks.ts | 47 ++++++--
.../policy_template_form.test.tsx | 111 +++++++++++++++---
.../fleet_extensions/policy_template_form.tsx | 2 +-
.../policy_template_selectors.tsx | 15 ++-
.../use_setup_technology.test.ts | 24 +++-
.../use_setup_technology.ts | 6 +-
.../public/components/test_subjects.ts | 5 +
9 files changed, 257 insertions(+), 48 deletions(-)
rename x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/{ => gcp_credentials_form}/gcp_credential_form.tsx (95%)
create mode 100644 x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credentials_form_agentless.tsx
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credential_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credential_form.tsx
similarity index 95%
rename from x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credential_form.tsx
rename to x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credential_form.tsx
index 4039d458548b..49c33f343e09 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credential_form.tsx
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credential_form.tsx
@@ -25,22 +25,24 @@ import type { NewPackagePolicy } from '@kbn/fleet-plugin/public';
import { NewPackagePolicyInput, PackageInfo } from '@kbn/fleet-plugin/common';
import { FormattedMessage } from '@kbn/i18n-react';
import { i18n } from '@kbn/i18n';
-import { GcpCredentialsType } from '../../../common/types_old';
+
+import { GcpCredentialsType } from '../../../../common/types_old';
import {
CLOUDBEAT_GCP,
SETUP_ACCESS_CLOUD_SHELL,
SETUP_ACCESS_MANUAL,
-} from '../../../common/constants';
-import { CspRadioOption, RadioGroup } from './csp_boxed_radio_group';
+} from '../../../../common/constants';
+import { CspRadioOption, RadioGroup } from '../csp_boxed_radio_group';
import {
getCspmCloudShellDefaultValue,
getPosturePolicy,
NewPackagePolicyPostureInput,
-} from './utils';
-import { MIN_VERSION_GCP_CIS } from '../../common/constants';
-import { cspIntegrationDocsNavigation } from '../../common/navigation/constants';
-import { ReadDocumentation } from './aws_credentials_form/aws_credentials_form';
-import { GCP_ORGANIZATION_ACCOUNT } from './policy_template_form';
+} from '../utils';
+import { MIN_VERSION_GCP_CIS } from '../../../common/constants';
+import { cspIntegrationDocsNavigation } from '../../../common/navigation/constants';
+import { ReadDocumentation } from '../aws_credentials_form/aws_credentials_form';
+import { GCP_ORGANIZATION_ACCOUNT } from '../policy_template_form';
+import { GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ } from '../../test_subjects';
export const CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS = {
GOOGLE_CLOUD_SHELL_SETUP: 'google_cloud_shell_setup_test_id',
@@ -51,7 +53,7 @@ export const CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS = {
CREDENTIALS_JSON: 'credentials_json_test_id',
};
type SetupFormatGCP = 'google_cloud_shell' | 'manual';
-const GCPSetupInfoContent = () => (
+export const GCPSetupInfoContent = () => (
<>
@@ -238,7 +240,7 @@ const getSetupFormatOptions = (): CspRadioOption[] => [
defaultMessage: 'Google Cloud Shell',
}),
disabled: false,
- testId: 'gcpGoogleCloudShellOptionTestId',
+ testId: GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ.CLOUD_SHELL,
},
{
id: SETUP_ACCESS_MANUAL,
@@ -246,11 +248,11 @@ const getSetupFormatOptions = (): CspRadioOption[] => [
defaultMessage: 'Manual',
}),
disabled: false,
- testId: 'gcpManualOptionTestId',
+ testId: GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ.MANUAL,
},
];
-interface GcpFormProps {
+export interface GcpFormProps {
newPolicy: NewPackagePolicy;
input: Extract;
updatePolicy(updatedPolicy: NewPackagePolicy): void;
@@ -486,7 +488,7 @@ export const GcpCredentialsForm = ({
);
};
-const GcpInputVarFields = ({
+export const GcpInputVarFields = ({
fields,
onChange,
isOrganization,
@@ -511,7 +513,10 @@ const GcpInputVarFields = ({
const credentialFieldValue = credentialOptionsList[0].value;
const credentialJSONValue = credentialOptionsList[1].value;
- const credentialsTypeValue = credentialsTypeFields?.value || credentialOptionsList[0].value;
+ const credentialsTypeValue =
+ credentialsTypeFields?.value ||
+ (credentialFilesFields && credentialFieldValue) ||
+ (credentialJSONFields && credentialJSONValue);
return (
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credentials_form_agentless.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credentials_form_agentless.tsx
new file mode 100644
index 000000000000..8a289ca755e2
--- /dev/null
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credentials_form_agentless.tsx
@@ -0,0 +1,62 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+import { EuiSpacer } from '@elastic/eui';
+
+import {
+ GcpFormProps,
+ GCPSetupInfoContent,
+ GcpInputVarFields,
+ gcpField,
+ getInputVarsFields,
+} from './gcp_credential_form';
+import { getPosturePolicy } from '../utils';
+import { ReadDocumentation } from '../aws_credentials_form/aws_credentials_form';
+import { cspIntegrationDocsNavigation } from '../../../common/navigation/constants';
+
+export const GcpCredentialsFormAgentless = ({
+ input,
+ newPolicy,
+ updatePolicy,
+ disabled,
+}: GcpFormProps) => {
+ const accountType = input.streams?.[0]?.vars?.['gcp.account_type']?.value;
+ const isOrganization = accountType === 'organization-account';
+ const organizationFields = ['gcp.organization_id', 'gcp.credentials.json'];
+ const singleAccountFields = ['gcp.project_id', 'gcp.credentials.json'];
+
+ /*
+ For Agentless only JSON credentials type is supported.
+ Also in case of organisation setup, project_id is not required in contrast to Agent-based.
+ */
+ const fields = getInputVarsFields(input, gcpField.fields).filter((field) => {
+ if (isOrganization) {
+ return organizationFields.includes(field.id);
+ } else {
+ return singleAccountFields.includes(field.id);
+ }
+ });
+
+ return (
+ <>
+
+
+
+ updatePolicy(getPosturePolicy(newPolicy, input.type, { [key]: { value } }))
+ }
+ isOrganization={isOrganization}
+ />
+
+
+
+ >
+ );
+};
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/mocks.ts b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/mocks.ts
index f893545024d7..b960ac3c48e2 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/mocks.ts
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/mocks.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
import type { NewPackagePolicy } from '@kbn/fleet-plugin/public';
-import type { PackageInfo } from '@kbn/fleet-plugin/common';
+import type { PackageInfo, PackagePolicyConfigRecord } from '@kbn/fleet-plugin/common';
import { createNewPackagePolicyMock, createAgentPolicyMock } from '@kbn/fleet-plugin/common/mocks';
import {
CLOUDBEAT_GCP,
@@ -17,11 +17,15 @@ import {
} from '../../../common/constants';
import type { PostureInput } from '../../../common/types_old';
-export const getMockPolicyAWS = () => getPolicyMock(CLOUDBEAT_AWS, 'cspm', 'aws');
-export const getMockPolicyGCP = () => getPolicyMock(CLOUDBEAT_GCP, 'cspm', 'gcp');
-export const getMockPolicyAzure = () => getPolicyMock(CLOUDBEAT_AZURE, 'cspm', 'azure');
+export const getMockPolicyAWS = (vars?: PackagePolicyConfigRecord) =>
+ getPolicyMock(CLOUDBEAT_AWS, 'cspm', 'aws', vars);
+export const getMockPolicyGCP = (vars?: PackagePolicyConfigRecord) =>
+ getPolicyMock(CLOUDBEAT_GCP, 'cspm', 'gcp', vars);
+export const getMockPolicyAzure = (vars?: PackagePolicyConfigRecord) =>
+ getPolicyMock(CLOUDBEAT_AZURE, 'cspm', 'azure', vars);
export const getMockPolicyK8s = () => getPolicyMock(CLOUDBEAT_VANILLA, 'kspm', 'self_managed');
-export const getMockPolicyEKS = () => getPolicyMock(CLOUDBEAT_EKS, 'kspm', 'eks');
+export const getMockPolicyEKS = (vars?: PackagePolicyConfigRecord) =>
+ getPolicyMock(CLOUDBEAT_EKS, 'kspm', 'eks', vars);
export const getMockPolicyVulnMgmtAWS = () =>
getPolicyMock(CLOUDBEAT_VULN_MGMT_AWS, 'vuln_mgmt', 'aws');
export const getMockAgentlessAgentPolicy = () => {
@@ -131,7 +135,8 @@ export const getMockPackageInfoCspmAzure = (packageVersion = '1.6.0') => {
const getPolicyMock = (
type: PostureInput,
posture: string,
- deployment: string
+ deployment: string,
+ vars: object = {}
): NewPackagePolicy => {
const mockPackagePolicy = createNewPackagePolicyMock();
@@ -204,26 +209,48 @@ const getPolicyMock = (
type: CLOUDBEAT_EKS,
policy_template: 'kspm',
enabled: type === CLOUDBEAT_EKS,
- streams: [{ enabled: type === CLOUDBEAT_EKS, data_stream: dataStream, vars: eksVarsMock }],
+ streams: [
+ {
+ enabled: type === CLOUDBEAT_EKS,
+ data_stream: dataStream,
+ vars: { ...eksVarsMock, ...vars },
+ },
+ ],
},
{
type: CLOUDBEAT_AWS,
policy_template: 'cspm',
enabled: type === CLOUDBEAT_AWS,
- streams: [{ enabled: type === CLOUDBEAT_AWS, data_stream: dataStream, vars: awsVarsMock }],
+ streams: [
+ {
+ enabled: type === CLOUDBEAT_AWS,
+ data_stream: dataStream,
+ vars: { ...awsVarsMock, ...vars },
+ },
+ ],
},
{
type: CLOUDBEAT_GCP,
policy_template: 'cspm',
enabled: type === CLOUDBEAT_GCP,
- streams: [{ enabled: type === CLOUDBEAT_GCP, data_stream: dataStream, vars: gcpVarsMock }],
+ streams: [
+ {
+ enabled: type === CLOUDBEAT_GCP,
+ data_stream: dataStream,
+ vars: { ...gcpVarsMock, ...vars },
+ },
+ ],
},
{
type: CLOUDBEAT_AZURE,
policy_template: 'cspm',
enabled: false,
streams: [
- { enabled: type === CLOUDBEAT_AZURE, data_stream: dataStream, vars: azureVarsMock },
+ {
+ enabled: type === CLOUDBEAT_AZURE,
+ data_stream: dataStream,
+ vars: { ...azureVarsMock, ...vars },
+ },
],
},
{
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx
index c7413bdac83b..3c8b767d1bde 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx
@@ -45,11 +45,13 @@ import { useParams } from 'react-router-dom';
import { createReactQueryResponse } from '../../test/fixtures/react_query';
import { useCspSetupStatusApi } from '../../common/api/use_setup_status_api';
import { usePackagePolicyList } from '../../common/api/use_package_policy_list';
-import { CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS } from './gcp_credential_form';
+import { CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS } from './gcp_credentials_form/gcp_credential_form';
import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl';
import {
AWS_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ,
AWS_CREDENTIALS_TYPE_SELECTOR_TEST_SUBJ,
+ CIS_GCP_OPTION_TEST_SUBJ,
+ GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ,
SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ,
SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ,
} from '../test_subjects';
@@ -1489,24 +1491,107 @@ describe('', () => {
});
});
- it('should not render setup technology selector for KSPM', () => {
+ it('should render setup technology selector for GCP for organisation account type', async () => {
const agentlessPolicy = getMockAgentlessAgentPolicy();
- const newPackagePolicy = getMockPolicyEKS();
+ const newPackagePolicy = getMockPolicyGCP();
- const { queryByTestId } = render(
-
+ const { getByTestId, queryByTestId, getByRole } = render(
+
);
+ // navigate to GCP
+ const gcpSelectorButton = getByTestId(CIS_GCP_OPTION_TEST_SUBJ);
+ userEvent.click(gcpSelectorButton);
+
const setupTechnologySelectorAccordion = queryByTestId(
SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ
);
+ const setupTechnologySelector = getByTestId(SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ);
+ const orgIdField = queryByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.ORGANIZATION_ID);
+ const projectIdField = queryByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.PROJECT_ID);
+ const credentialsJsonField = queryByTestId(
+ CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_JSON
+ );
+ const credentialsTypSelector = queryByTestId(
+ CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_TYPE
+ );
+ const credentialsFileField = queryByTestId(
+ CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_FILE
+ );
- expect(setupTechnologySelectorAccordion).not.toBeInTheDocument();
+ // default state for GCP with the Org selected
+ expect(setupTechnologySelectorAccordion).toBeInTheDocument();
+ expect(setupTechnologySelector).toBeInTheDocument();
+ expect(setupTechnologySelector).toHaveTextContent(/agentless/i);
+ expect(orgIdField).toBeInTheDocument();
+ expect(credentialsJsonField).toBeInTheDocument();
+ expect(projectIdField).not.toBeInTheDocument();
+ expect(credentialsTypSelector).not.toBeInTheDocument();
+ expect(credentialsFileField).not.toBeInTheDocument();
+
+ // select agent-based and check for cloudformation option
+ userEvent.click(setupTechnologySelector);
+ const agentBasedOption = getByRole('option', { name: /agent-based/i });
+ await waitForEuiPopoverOpen();
+ userEvent.click(agentBasedOption);
+ await waitFor(() => {
+ expect(getByTestId(GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ.CLOUD_SHELL)).toBeInTheDocument();
+ expect(getByTestId(GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ.MANUAL)).toBeInTheDocument();
+ });
});
- it('should not render setup technology selector for CNVM', () => {
+ it('should render setup technology selector for GCP for single-account', async () => {
const agentlessPolicy = getMockAgentlessAgentPolicy();
- const newPackagePolicy = getMockPolicyVulnMgmtAWS();
+ const newPackagePolicy = getMockPolicyGCP({
+ 'gcp.account_type': { value: GCP_SINGLE_ACCOUNT, type: 'text' },
+ });
+
+ const { getByTestId, queryByTestId } = render(
+
+ );
+
+ // navigate to GCP
+ const gcpSelectorButton = getByTestId(CIS_GCP_OPTION_TEST_SUBJ);
+ userEvent.click(gcpSelectorButton);
+
+ const setupTechnologySelectorAccordion = queryByTestId(
+ SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ
+ );
+ const setupTechnologySelector = queryByTestId(SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ);
+ const orgIdField = queryByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.ORGANIZATION_ID);
+ const projectIdField = queryByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.PROJECT_ID);
+ const credentialsJsonField = queryByTestId(
+ CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_JSON
+ );
+ const credentialsTypSelector = queryByTestId(
+ CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_TYPE
+ );
+ const credentialsFileField = queryByTestId(
+ CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_FILE
+ );
+
+ // default state for GCP with the Org selected
+ expect(setupTechnologySelectorAccordion).toBeInTheDocument();
+ expect(setupTechnologySelector).toBeInTheDocument();
+ expect(setupTechnologySelector).toHaveTextContent(/agentless/i);
+ expect(orgIdField).not.toBeInTheDocument();
+ expect(credentialsJsonField).toBeInTheDocument();
+ expect(projectIdField).toBeInTheDocument();
+ expect(credentialsTypSelector).not.toBeInTheDocument();
+ expect(credentialsFileField).not.toBeInTheDocument();
+ });
+
+ it('should not render setup technology selector for KSPM', () => {
+ const agentlessPolicy = getMockAgentlessAgentPolicy();
+ const newPackagePolicy = getMockPolicyEKS();
const { queryByTestId } = render(
@@ -1519,16 +1604,12 @@ describe('', () => {
expect(setupTechnologySelectorAccordion).not.toBeInTheDocument();
});
- it('should not render setup technology selector for CSPM GCP', () => {
+ it('should not render setup technology selector for CNVM', () => {
const agentlessPolicy = getMockAgentlessAgentPolicy();
- const newPackagePolicy = getMockPolicyGCP();
+ const newPackagePolicy = getMockPolicyVulnMgmtAWS();
const { queryByTestId } = render(
-
+
);
const setupTechnologySelectorAccordion = queryByTestId(
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx
index 303df35545db..37c0e147c79b 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx
@@ -58,7 +58,7 @@ import {
PolicyTemplateVarsForm,
} from './policy_template_selectors';
import { usePackagePolicyList } from '../../common/api/use_package_policy_list';
-import { gcpField, getInputVarsFields } from './gcp_credential_form';
+import { gcpField, getInputVarsFields } from './gcp_credentials_form/gcp_credential_form';
import { SetupTechnologySelector } from './setup_technology_selector/setup_technology_selector';
import { useSetupTechnology } from './setup_technology_selector/use_setup_technology';
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx
index 7a045e7f82c0..a7a96ba4c917 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx
@@ -23,7 +23,8 @@ import { AzureCredentialsForm } from './azure_credentials_form/azure_credentials
import { AwsCredentialsForm } from './aws_credentials_form/aws_credentials_form';
import { AwsCredentialsFormAgentless } from './aws_credentials_form/aws_credentials_form_agentless';
import { EksCredentialsForm } from './eks_credentials_form';
-import { GcpCredentialsForm } from './gcp_credential_form';
+import { GcpCredentialsForm } from './gcp_credentials_form/gcp_credential_form';
+import { GcpCredentialsFormAgentless } from './gcp_credentials_form/gcp_credentials_form_agentless';
interface PolicyTemplateSelectorProps {
selectedTemplate: CloudSecurityPolicyTemplate;
@@ -84,16 +85,22 @@ export const PolicyTemplateVarsForm = ({
setupTechnology,
...props
}: PolicyTemplateVarsFormProps) => {
+ const isAgentless = setupTechnology === SetupTechnology.AGENTLESS;
+
switch (input.type) {
+ case 'cloudbeat/cis_eks':
+ return ;
case 'cloudbeat/cis_aws':
- if (setupTechnology === SetupTechnology.AGENTLESS) {
+ if (isAgentless) {
return ;
}
return ;
- case 'cloudbeat/cis_eks':
- return ;
case 'cloudbeat/cis_gcp':
+ if (isAgentless) {
+ return ;
+ }
+
return ;
case 'cloudbeat/cis_azure':
return ;
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.test.ts b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.test.ts
index 744a87a009f9..0e32964fae40 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.test.ts
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.test.ts
@@ -10,7 +10,7 @@ import { renderHook, act } from '@testing-library/react-hooks';
import { SetupTechnology } from '@kbn/fleet-plugin/public';
import { AgentPolicy, NewPackagePolicyInput } from '@kbn/fleet-plugin/common';
-import { CLOUDBEAT_AWS } from '../../../../common/constants';
+import { CLOUDBEAT_AWS, CLOUDBEAT_AZURE, CLOUDBEAT_GCP } from '../../../../common/constants';
import { useSetupTechnology } from './use_setup_technology';
describe('useSetupTechnology', () => {
@@ -27,7 +27,7 @@ describe('useSetupTechnology', () => {
expect(result.current.setupTechnology).toBe(SetupTechnology.AGENT_BASED);
});
- it('sets to AGENTLESS when agentless is available', () => {
+ it('sets to AGENTLESS when agentless is available and AWS cloud', () => {
const agentlessPolicy = { id: 'agentlessPolicyId' } as AgentPolicy;
const input = { type: CLOUDBEAT_AWS } as NewPackagePolicyInput;
const { result } = renderHook(() =>
@@ -37,6 +37,26 @@ describe('useSetupTechnology', () => {
expect(result.current.setupTechnology).toBe(SetupTechnology.AGENTLESS);
});
+ it('sets to AGENTLESS when agentless is available and GCP cloud', () => {
+ const agentlessPolicy = { id: 'agentlessPolicyId' } as AgentPolicy;
+ const input = { type: CLOUDBEAT_GCP } as NewPackagePolicyInput;
+ const { result } = renderHook(() =>
+ useSetupTechnology({ input, agentlessPolicy, isEditPage })
+ );
+ expect(result.current.isAgentlessAvailable).toBeTruthy();
+ expect(result.current.setupTechnology).toBe(SetupTechnology.AGENTLESS);
+ });
+
+ it('sets to AGENT_BASED when agentless is available and Azure cloud', () => {
+ const agentlessPolicy = { id: 'agentlessPolicyId' } as AgentPolicy;
+ const input = { type: CLOUDBEAT_AZURE } as NewPackagePolicyInput;
+ const { result } = renderHook(() =>
+ useSetupTechnology({ input, agentlessPolicy, isEditPage })
+ );
+ expect(result.current.isAgentlessAvailable).toBeFalsy();
+ expect(result.current.setupTechnology).toBe(SetupTechnology.AGENT_BASED);
+ });
+
it('sets to AGENT_BASED when agentPolicyId differs from agentlessPolicyId', () => {
const input = { type: CLOUDBEAT_AWS } as NewPackagePolicyInput;
const agentPolicy = { id: 'agentPolicyId' } as AgentPolicy;
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts
index 4201ffde1b2a..bcca6cd2ed41 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts
+++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts
@@ -8,7 +8,7 @@ import { useEffect, useState } from 'react';
import { AgentPolicy, NewPackagePolicyInput } from '@kbn/fleet-plugin/common';
import { SetupTechnology } from '@kbn/fleet-plugin/public';
-import { CLOUDBEAT_AWS } from '../../../../common/constants';
+import { CLOUDBEAT_AWS, CLOUDBEAT_GCP } from '../../../../common/constants';
export const useSetupTechnology = ({
input,
@@ -24,7 +24,9 @@ export const useSetupTechnology = ({
isEditPage: boolean;
}) => {
const isCspmAws = input.type === CLOUDBEAT_AWS;
- const isAgentlessAvailable = Boolean(isCspmAws && agentlessPolicy);
+ const isCspmGcp = input.type === CLOUDBEAT_GCP;
+ const isAgentlessSupportedForCloudProvider = isCspmAws || isCspmGcp;
+ const isAgentlessAvailable = Boolean(isAgentlessSupportedForCloudProvider && agentlessPolicy);
const agentPolicyId = agentPolicy?.id;
const agentlessPolicyId = agentlessPolicy?.id;
const [setupTechnology, setSetupTechnology] = useState(() => {
diff --git a/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts b/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts
index 250b5d01c82c..e5c01bfb933e 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts
+++ b/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts
@@ -54,6 +54,11 @@ export const AWS_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ = {
CLOUDFORMATION: 'aws-cloudformation-setup-option',
MANUAL: 'aws-manual-setup-option',
};
+export const GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ = {
+ CLOUD_SHELL: 'gcpGoogleCloudShellOptionTestId',
+ MANUAL: 'gcpManualOptionTestId',
+};
+export const CIS_GCP_OPTION_TEST_SUBJ = 'cisGcpTestId';
export const SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ = 'setup-technology-selector-accordion';
export const SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ = 'setup-technology-selector';
From d793a7ff8a7ee8fea7fc93f17c6016bfc8ffdd71 Mon Sep 17 00:00:00 2001
From: Alex Szabo
Date: Mon, 11 Mar 2024 15:43:59 +0100
Subject: [PATCH 009/100] [Ops/QA] Remove legacy bucket duplication (#175907)
## Summary
Removes references to the legacy bucket after some graceful transition
time.
Follow up after: #175891
Closes: https://github.com/elastic/kibana/issues/175904
---
.../reporting/downloadPrevSha.sh | 10 +++-------
.../code_coverage/reporting/uploadPrevSha.sh | 3 ---
.../reporting/uploadStaticSite.sh | 19 +------------------
3 files changed, 4 insertions(+), 28 deletions(-)
diff --git a/.buildkite/scripts/steps/code_coverage/reporting/downloadPrevSha.sh b/.buildkite/scripts/steps/code_coverage/reporting/downloadPrevSha.sh
index a0399977457a..6107169c63cb 100755
--- a/.buildkite/scripts/steps/code_coverage/reporting/downloadPrevSha.sh
+++ b/.buildkite/scripts/steps/code_coverage/reporting/downloadPrevSha.sh
@@ -2,13 +2,9 @@
set -euo pipefail
-# TODO: Safe to remove this after 2024-03-01 (https://github.com/elastic/kibana/issues/175904)
-gsutil -m cp -r gs://elastic-bekitzur-kibana-coverage-live/previous_pointer/previous.txt . || echo "### Previous Pointer NOT FOUND?"
-
-# TODO: Activate after the above is removed
-#.buildkite/scripts/common/activate_service_account.sh gs://elastic-kibana-coverage-live
-#gsutil -m cp -r gs://elastic-kibana-coverage-live/previous_pointer/previous.txt . || echo "### Previous Pointer NOT FOUND?"
-#.buildkite/scripts/common/activate_service_account.sh --unset-impersonation
+.buildkite/scripts/common/activate_service_account.sh gs://elastic-kibana-coverage-live
+gsutil -m cp -r gs://elastic-kibana-coverage-live/previous_pointer/previous.txt . || echo "### Previous Pointer NOT FOUND?"
+.buildkite/scripts/common/activate_service_account.sh --unset-impersonation
if [ -e ./previous.txt ]; then
mv previous.txt downloaded_previous.txt
diff --git a/.buildkite/scripts/steps/code_coverage/reporting/uploadPrevSha.sh b/.buildkite/scripts/steps/code_coverage/reporting/uploadPrevSha.sh
index 2164a4cd6425..18f41bdba64a 100755
--- a/.buildkite/scripts/steps/code_coverage/reporting/uploadPrevSha.sh
+++ b/.buildkite/scripts/steps/code_coverage/reporting/uploadPrevSha.sh
@@ -9,9 +9,6 @@ collectPrevious() {
}
collectPrevious
-# TODO: Safe to remove this after 2024-03-01 (https://github.com/elastic/kibana/issues/175904)
-gsutil cp previous.txt gs://elastic-bekitzur-kibana-coverage-live/previous_pointer/
-
.buildkite/scripts/common/activate_service_account.sh gs://elastic-kibana-coverage-live
gsutil cp previous.txt gs://elastic-kibana-coverage-live/previous_pointer/
.buildkite/scripts/common/activate_service_account.sh --unset-impersonation
diff --git a/.buildkite/scripts/steps/code_coverage/reporting/uploadStaticSite.sh b/.buildkite/scripts/steps/code_coverage/reporting/uploadStaticSite.sh
index 701704a3a8b2..ba3b86fed9d3 100755
--- a/.buildkite/scripts/steps/code_coverage/reporting/uploadStaticSite.sh
+++ b/.buildkite/scripts/steps/code_coverage/reporting/uploadStaticSite.sh
@@ -4,25 +4,8 @@ set -euo pipefail
xs=("$@")
-# TODO: Safe to remove this block after 2024-03-01 (https://github.com/elastic/kibana/issues/175904) - also clean up usages
-echo "--- Uploading static site (legacy)"
-uploadPrefix_old="gs://elastic-bekitzur-kibana-coverage-live/"
-uploadPrefixWithTimeStamp_old="${uploadPrefix_old}${TIME_STAMP}/"
-uploadBase_old() {
- for x in 'src/dev/code_coverage/www/index.html' 'src/dev/code_coverage/www/404.html'; do
- gsutil -m -q cp -r -a public-read -z js,css,html "${x}" "${uploadPrefix_old}"
- done
-}
-uploadRest_old() {
- for x in "${xs[@]}"; do
- gsutil -m -q cp -r -a public-read -z js,css,html "target/kibana-coverage/${x}-combined" "${uploadPrefixWithTimeStamp_old}"
- done
-}
-.buildkite/scripts/common/activate_service_account.sh --logout-gcloud
-uploadBase_old
-uploadRest_old
-
echo "--- Uploading static site"
+
uploadPrefix="gs://elastic-kibana-coverage-live/"
uploadPrefixWithTimeStamp="${uploadPrefix}${TIME_STAMP}/"
From 74386d037dc271b07ef46c1747c647360ac0df85 Mon Sep 17 00:00:00 2001
From: Dario Gieselaar
Date: Mon, 11 Mar 2024 15:46:08 +0100
Subject: [PATCH 010/100] [Obs AI Assistant] Split up plugin in core/app
(#178018)
Splits up the Observability AI Assistant plugin so it can be used
outside of the context of the Observability apps. Additionally, the
following changes were made:
- Add the AI Assistant button to the top nav, instead of the header
menu. This prevents unmounts and remounts (and makes it much easier to
use everywhere).
- Contextual messages now use a function request/response to inject the
data of the insight. This allows us to remove `startedFrom`.
- ML is now an runtime dependency only (via `core.plugins.onStart`).
With a static dependency, we'll run into circular dependency issues.
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
.github/CODEOWNERS | 1 +
docs/developer/plugin-list.asciidoc | 4 +
package.json | 1 +
packages/kbn-optimizer/limits.yml | 3 +-
.../observability/public/plugin.ts | 8 +-
tsconfig.base.json | 2 +
x-pack/.i18nrc.json | 70 ++++++---
.../observability_solution/apm/kibana.jsonc | 3 +-
.../error_sample_contextual_insight.tsx | 74 +++++-----
.../components/routing/app_root/index.tsx | 6 -
.../routing/templates/apm_main_template.tsx | 4 +-
.../templates/settings_template.stories.tsx | 4 +-
.../context/apm_plugin/apm_plugin_context.tsx | 4 +-
.../apm_plugin/mock_apm_plugin_context.tsx | 4 +-
.../apm_plugin/mock_apm_plugin_storybook.tsx | 4 +-
.../apm/public/plugin.ts | 4 +-
.../apm/server/assistant_functions/index.ts | 9 +-
.../apm/server/types.ts | 8 +-
.../public/application/types.ts | 4 +-
.../components/action_menu/action_menu.tsx | 11 +-
.../components/action_menu/index.tsx | 10 --
.../exploratory_view/public/plugin.ts | 4 +-
.../observability_solution/infra/kibana.jsonc | 1 -
.../components/log_rate_analysis.tsx | 29 ++--
.../infra/public/apps/common_providers.tsx | 4 +-
.../tabs/processes/process_row.tsx | 106 +++++++-------
.../infra/public/pages/logs/page_content.tsx | 6 -
.../infra/public/pages/metrics/index.tsx | 9 --
.../infra/public/types.ts | 4 +-
.../log_ai_assistant/log_ai_assistant.tsx | 55 ++++---
.../logs_shared/public/types.ts | 4 +-
.../log_rate_analysis.tsx | 25 ++--
.../alerts/components/alert_actions.test.tsx | 3 +-
.../components/header_menu/header_menu.tsx | 11 +-
.../sections/apm/apm_section.test.tsx | 5 +-
.../observability/public/plugin.ts | 8 +-
.../common/conversation_complete.ts | 2 +-
.../common/functions/function_visibility.ts | 13 ++
.../common/functions/types.ts | 42 ++++++
.../common/functions/visualize_esql.ts | 26 ----
.../common/index.ts | 33 ++++-
.../common/types.ts | 50 -------
.../utils/filter_function_definitions.ts | 2 +-
.../common/utils/process_openai_stream.ts | 10 +-
.../observability_ai_assistant/kibana.jsonc | 14 +-
.../public/analytics/index.ts | 30 +---
.../public/analytics/schemas/chat_feedback.ts | 7 +-
.../analytics/schemas/insight_feedback.ts | 7 +-
.../analytics/schemas/user_sent_prompt.ts | 4 +-
.../public/analytics/telemetry_event_type.ts | 12 ++
.../action_menu_item/action_menu_item.tsx | 117 ---------------
.../public/components/assistant_avatar.tsx | 9 +-
.../{ => buttons}/feedback_buttons.tsx | 2 +-
.../components/chat/chat_item_controls.tsx | 4 +-
.../public/components/insight/insight.tsx | 36 ++---
.../insight/insight_base.stories.tsx | 2 +-
.../message_panel/message_panel.stories.tsx | 2 +-
...ity_ai_assistant_chat_service_context.tsx} | 3 -
...ai_assistant_multipane_flyout_context.tsx} | 3 -
.../public/hooks/use_chat.test.ts | 28 ++--
.../public/hooks/use_chat.ts | 52 +++++--
...observability_ai_assistant_chat_service.ts | 18 ++-
.../public/index.ts | 54 ++++++-
.../public/mock.tsx | 51 ++-----
.../public/plugin.tsx | 112 ++++-----------
.../public/service/create_chat_service.ts | 13 +-
.../service/create_mock_chat_service.ts | 8 +-
.../public/service/create_service.ts | 34 ++---
...age.ts => get_assistant_system_message.ts} | 9 +-
.../public/storybook_mock.tsx | 47 ++++++
.../public/types.ts | 81 ++++-------
.../public/utils/builders.ts | 119 +---------------
.../utils/get_contextual_insight_messages.ts | 47 ++++++
.../public/utils/storybook_decorator.tsx | 25 ++--
.../scripts/evaluation/kibana_client.ts | 9 +-
.../server/functions/context.ts | 7 +-
.../server/functions/elasticsearch.ts | 4 +-
.../server/functions/get_dataset_info.ts | 7 +-
.../server/functions/index.ts | 36 ++---
.../server/functions/kibana.ts | 9 +-
.../server/functions/summarize.ts | 4 +-
.../server/index.ts | 5 +-
.../server/plugin.ts | 29 ++--
.../server/routes/functions/route.ts | 7 +-
.../server/routes/types.ts | 7 +-
.../chat_function_client/index.test.ts | 37 +----
.../service/chat_function_client/index.ts | 13 +-
.../server/service/client/adapters/types.ts | 2 +-
.../server/service/client/index.test.ts | 2 +-
.../server/service/client/index.ts | 4 +-
.../server/service/index.ts | 12 +-
.../server/service/types.ts | 12 +-
.../server/types.ts | 8 +-
.../observability_ai_assistant/tsconfig.json | 23 ---
.../.storybook/jest_setup.js | 11 ++
.../.storybook/main.js | 8 ++
.../.storybook/preview.js | 10 ++
.../observability_ai_assistant_app/README.md | 3 +
.../common/functions/lens.ts | 2 +-
.../common/functions/visualize_esql.ts | 33 +++++
.../jest.config.js | 25 ++++
.../kibana.jsonc | 30 ++++
.../public/application.tsx | 44 ++++++
.../public/assets/elastic_ai_assistant.png | Bin
.../buttons/ask_assistant_button.stories.tsx | 0
.../buttons/ask_assistant_button.tsx | 0
...xpand_conversation_list_button.stories.tsx | 0
.../hide_expand_conversation_list_button.tsx | 0
.../buttons/new_chat_button.stories.tsx | 0
.../components/buttons/new_chat_button.tsx | 0
.../components/chat/chat_actions_menu.tsx | 2 +-
.../components/chat/chat_body.stories.tsx | 8 +-
.../public/components/chat/chat_body.test.tsx | 2 +-
.../public/components/chat/chat_body.tsx | 55 ++++---
.../chat/chat_consolidated_items.tsx | 0
.../components/chat/chat_flyout.stories.tsx | 5 +-
.../public/components/chat/chat_flyout.tsx | 37 ++---
.../components/chat/chat_header.stories.tsx | 0
.../public/components/chat/chat_header.tsx | 2 +-
.../components/chat/chat_inline_edit.tsx | 0
.../public/components/chat/chat_item.tsx | 14 +-
.../components/chat/chat_item_actions.tsx | 0
.../components/chat/chat_item_avatar.tsx | 3 +-
...chat_item_content_inline_prompt_editor.tsx | 10 +-
.../components/chat/chat_item_title.tsx | 0
.../components/chat/chat_timeline.stories.tsx | 14 +-
.../public/components/chat/chat_timeline.tsx | 26 ++--
.../chat/conversation_list.stories.tsx | 0
.../components/chat/conversation_list.tsx | 2 +-
.../public/components/chat/disclaimer.tsx | 0
.../chat/function_list_popover.stories.tsx | 0
.../components/chat/function_list_popover.tsx | 3 +-
.../chat/incorrect_license_panel.tsx | 0
.../chat/knowledge_base_callout.stories.tsx | 0
.../chat/knowledge_base_callout.tsx | 0
.../components/chat/welcome_message.test.tsx | 0
.../components/chat/welcome_message.tsx | 2 +-
.../chat/welcome_message_connectors.tsx | 0
.../chat/welcome_message_knowledge_base.tsx | 0
...ssage_knowledge_base_setup_error_panel.tsx | 0
.../public/components/nav_control/index.tsx | 108 ++++++++++++++
.../nav_control/lazy_nav_control.tsx | 13 ++
.../public/components/page_template.tsx | 0
.../prompt_editor/prompt_editor.stories.tsx | 0
.../prompt_editor/prompt_editor.tsx | 10 +-
.../prompt_editor/prompt_editor_function.tsx | 3 +-
.../prompt_editor_natural_language.tsx | 3 +-
.../public/components/render_function.tsx | 6 +-
.../components/technical_preview_badge.tsx | 0
...lity_ai_assistant_app_service_provider.tsx | 16 +++
.../public/functions/index.ts | 15 +-
.../public/functions/lens.tsx | 13 +-
.../public/functions/visualize_esql.test.tsx | 11 +-
.../public/functions/visualize_esql.tsx | 48 ++++---
.../__storybook_mocks__/use_conversations.ts | 0
.../__storybook_mocks__/use_current_user.ts | 0
.../use_genai_connectors.ts | 0
.../hooks/__storybook_mocks__/use_kibana.ts | 0
.../__storybook_mocks__/use_knowledge_base.ts | 0
.../use_observability_ai_assistant.ts | 0
...observability_ai_assistant_chat_service.ts | 0
.../public/hooks/is_nav_control_visible.tsx | 39 +++++
.../public/hooks/use_confirm_modal.tsx | 0
.../public/hooks/use_conversation.test.tsx | 49 ++++---
.../public/hooks/use_conversation.ts | 29 ++--
.../public/hooks/use_conversation_key.ts | 0
.../public/hooks/use_conversation_list.ts | 11 +-
.../public/hooks/use_current_user.ts | 14 +-
.../public/hooks/use_force_update.ts | 0
.../public/hooks/use_genai_connectors.ts | 22 +++
.../public/hooks/use_json_editor_model.ts | 0
.../public/hooks/use_kibana.ts | 19 +++
.../public/hooks/use_knowledge_base.tsx | 9 +-
.../public/hooks/use_license.ts | 17 ++-
.../hooks/use_license_management_locator.ts | 14 +-
..._observability_ai_assistant_app_service.ts | 20 +++
...observability_ai_assistant_chat_service.ts | 19 +++
.../use_observability_ai_assistant_params.ts | 0
.../use_observability_ai_assistant_router.ts | 0
.../public/hooks/use_once.ts | 21 +++
.../public/hooks/use_theme.ts | 12 ++
.../public/i18n.ts | 0
.../public/index.ts | 23 +++
.../public/plugin.tsx | 134 ++++++++++++++++++
.../public/routes/config.tsx | 0
.../conversations/conversation_view.tsx | 27 ++--
.../public/service/create_app_service.ts | 21 +++
.../public/types.ts | 60 ++++++++
.../public/utils/builders.ts | 124 ++++++++++++++++
.../utils/create_initialized_object.test.ts | 0
.../public/utils/create_initialized_object.ts | 2 +-
.../public/utils/create_mock_chat_service.ts | 25 ++++
.../public/utils/get_role_translation.ts | 2 +-
.../public/utils/get_settings_href.ts | 0
.../public/utils/get_settings_kb_href.ts | 0
..._timeline_items_from_conversation.test.tsx | 83 ++++-------
.../get_timeline_items_from_conversation.tsx | 23 +--
.../public/utils/safe_json_parse.ts | 0
.../public/utils/shared_providers.tsx} | 37 ++---
.../public/utils/storybook_decorator.tsx | 48 +++++++
.../server/config.ts | 14 ++
.../server/functions/alerts.ts | 12 +-
.../server/functions/index.ts | 25 ++++
.../server/functions/lens.ts | 6 +-
.../correct_common_esql_mistakes.test.ts | 0
.../query/correct_common_esql_mistakes.ts | 0
.../functions/query/esql_docs/esql-abs.txt | 0
.../functions/query/esql_docs/esql-acos.txt | 0
.../functions/query/esql_docs/esql-asin.txt | 0
.../functions/query/esql_docs/esql-atan.txt | 0
.../functions/query/esql_docs/esql-atan2.txt | 0
.../query/esql_docs/esql-auto_bucket.txt | 0
.../functions/query/esql_docs/esql-avg.txt | 0
.../functions/query/esql_docs/esql-case.txt | 0
.../functions/query/esql_docs/esql-ceil.txt | 0
.../query/esql_docs/esql-coalesce.txt | 0
.../functions/query/esql_docs/esql-concat.txt | 0
.../functions/query/esql_docs/esql-cos.txt | 0
.../functions/query/esql_docs/esql-cosh.txt | 0
.../functions/query/esql_docs/esql-count.txt | 0
.../query/esql_docs/esql-count_distinct.txt | 0
.../query/esql_docs/esql-date_extract.txt | 0
.../query/esql_docs/esql-date_format.txt | 0
.../query/esql_docs/esql-date_parse.txt | 0
.../query/esql_docs/esql-date_trunc.txt | 0
.../query/esql_docs/esql-dissect.txt | 0
.../functions/query/esql_docs/esql-drop.txt | 0
.../functions/query/esql_docs/esql-e.txt | 0
.../functions/query/esql_docs/esql-enrich.txt | 0
.../functions/query/esql_docs/esql-eval.txt | 0
.../functions/query/esql_docs/esql-floor.txt | 0
.../functions/query/esql_docs/esql-from.txt | 0
.../query/esql_docs/esql-greatest.txt | 0
.../functions/query/esql_docs/esql-grok.txt | 0
.../functions/query/esql_docs/esql-keep.txt | 0
.../functions/query/esql_docs/esql-least.txt | 0
.../functions/query/esql_docs/esql-left.txt | 0
.../functions/query/esql_docs/esql-length.txt | 0
.../functions/query/esql_docs/esql-limit.txt | 0
.../query/esql_docs/esql-limitations.txt | 0
.../functions/query/esql_docs/esql-log10.txt | 0
.../functions/query/esql_docs/esql-ltrim.txt | 0
.../functions/query/esql_docs/esql-max.txt | 0
.../functions/query/esql_docs/esql-median.txt | 0
.../esql-median_absolute_deviation.txt | 0
.../functions/query/esql_docs/esql-min.txt | 0
.../functions/query/esql_docs/esql-mv_avg.txt | 0
.../query/esql_docs/esql-mv_concat.txt | 0
.../query/esql_docs/esql-mv_count.txt | 0
.../query/esql_docs/esql-mv_dedupe.txt | 0
.../query/esql_docs/esql-mv_expand.txt | 0
.../functions/query/esql_docs/esql-mv_max.txt | 0
.../query/esql_docs/esql-mv_median.txt | 0
.../functions/query/esql_docs/esql-mv_min.txt | 0
.../functions/query/esql_docs/esql-mv_sum.txt | 0
.../functions/query/esql_docs/esql-now.txt | 0
.../query/esql_docs/esql-operators.txt | 0
.../query/esql_docs/esql-overview.txt | 0
.../query/esql_docs/esql-percentile.txt | 0
.../functions/query/esql_docs/esql-pi.txt | 0
.../functions/query/esql_docs/esql-pow.txt | 0
.../esql_docs/esql-processing-commands.txt | 0
.../functions/query/esql_docs/esql-rename.txt | 0
.../query/esql_docs/esql-replace.txt | 0
.../functions/query/esql_docs/esql-right.txt | 0
.../functions/query/esql_docs/esql-round.txt | 0
.../functions/query/esql_docs/esql-row.txt | 0
.../functions/query/esql_docs/esql-rtrim.txt | 0
.../functions/query/esql_docs/esql-show.txt | 0
.../functions/query/esql_docs/esql-sin.txt | 0
.../functions/query/esql_docs/esql-sinh.txt | 0
.../functions/query/esql_docs/esql-sort.txt | 0
.../query/esql_docs/esql-source-commands.txt | 0
.../functions/query/esql_docs/esql-split.txt | 0
.../functions/query/esql_docs/esql-sqrt.txt | 0
.../functions/query/esql_docs/esql-stats.txt | 0
.../query/esql_docs/esql-substring.txt | 0
.../functions/query/esql_docs/esql-sum.txt | 0
.../functions/query/esql_docs/esql-syntax.txt | 0
.../functions/query/esql_docs/esql-tan.txt | 0
.../functions/query/esql_docs/esql-tanh.txt | 0
.../functions/query/esql_docs/esql-tau.txt | 0
.../query/esql_docs/esql-to_boolean.txt | 0
.../esql_docs/esql-to_cartesianpoint.txt | 0
.../query/esql_docs/esql-to_datetime.txt | 0
.../query/esql_docs/esql-to_degrees.txt | 0
.../query/esql_docs/esql-to_double.txt | 0
.../query/esql_docs/esql-to_geopoint.txt | 0
.../query/esql_docs/esql-to_integer.txt | 0
.../functions/query/esql_docs/esql-to_ip.txt | 0
.../query/esql_docs/esql-to_long.txt | 0
.../query/esql_docs/esql-to_radians.txt | 0
.../query/esql_docs/esql-to_string.txt | 0
.../query/esql_docs/esql-to_unsigned_long.txt | 0
.../query/esql_docs/esql-to_version.txt | 0
.../functions/query/esql_docs/esql-trim.txt | 0
.../functions/query/esql_docs/esql-where.txt | 0
.../server/functions/query/index.ts | 22 +--
.../server/functions/query/system_message.txt | 0
.../server/functions/visualize_esql.ts | 13 +-
.../server/index.ts | 25 ++++
.../server/plugin.ts | 60 ++++++++
.../server/types.ts | 30 ++++
.../tsconfig.json | 54 +++++++
.../components/logs_explorer_top_nav_menu.tsx | 11 +-
.../public/types.ts | 4 +-
.../profiling/kibana.jsonc | 3 +-
.../profiling/public/app.tsx | 12 --
.../frame_information_ai_assistant.tsx | 113 +++++++--------
.../profiling/public/types.ts | 8 +-
.../components/common/header/action_menu.tsx | 11 --
.../synthetics/public/plugin.ts | 8 +-
.../public/legacy_uptime/app/uptime_app.tsx | 5 +-
.../components/common/header/action_menu.tsx | 12 +-
.../uptime/public/plugin.ts | 8 +-
.../app/rum_dashboard/action_menu/index.tsx | 11 +-
.../ux/public/plugin.ts | 8 +-
.../translations/translations/fr-FR.json | 1 -
.../translations/translations/ja-JP.json | 1 -
.../translations/translations/zh-CN.json | 1 -
.../common/create_openai_chunk.ts | 2 +-
.../common/ui/index.ts | 2 +-
x-pack/test/tsconfig.json | 1 +
yarn.lock | 4 +
324 files changed, 2325 insertions(+), 1540 deletions(-)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/function_visibility.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/telemetry_event_type.ts
delete mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx
rename x-pack/plugins/observability_solution/observability_ai_assistant/public/components/{ => buttons}/feedback_buttons.tsx (98%)
rename x-pack/plugins/observability_solution/observability_ai_assistant/public/context/{observability_ai_assistant_chat_service_provider.tsx => observability_ai_assistant_chat_service_context.tsx} (81%)
rename x-pack/plugins/observability_solution/observability_ai_assistant/public/context/{observability_ai_assistant_multipane_flyout_provider.tsx => observability_ai_assistant_multipane_flyout_context.tsx} (80%)
rename x-pack/plugins/observability_solution/observability_ai_assistant/public/service/{get_assistant_setup_message.ts => get_assistant_system_message.ts} (75%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_contextual_insight_messages.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/jest_setup.js
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/main.js
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/preview.js
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/README.md
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/common/functions/lens.ts (98%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/common/functions/visualize_esql.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/jest.config.js
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/kibana.jsonc
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/application.tsx
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/assets/elastic_ai_assistant.png (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/buttons/ask_assistant_button.stories.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/buttons/ask_assistant_button.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/buttons/hide_expand_conversation_list_button.stories.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/buttons/hide_expand_conversation_list_button.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/buttons/new_chat_button.stories.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/buttons/new_chat_button.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_actions_menu.tsx (98%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_body.stories.tsx (98%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_body.test.tsx (98%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_body.tsx (92%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_consolidated_items.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_flyout.stories.tsx (85%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_flyout.tsx (95%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_header.stories.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_header.tsx (98%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_inline_edit.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_item.tsx (93%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_item_actions.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_item_avatar.tsx (92%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_item_content_inline_prompt_editor.tsx (88%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_item_title.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_timeline.stories.tsx (91%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/chat_timeline.tsx (86%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/conversation_list.stories.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/conversation_list.tsx (99%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/disclaimer.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/function_list_popover.stories.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/function_list_popover.tsx (97%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/incorrect_license_panel.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/knowledge_base_callout.stories.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/knowledge_base_callout.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/welcome_message.test.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/welcome_message.tsx (97%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/welcome_message_connectors.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/welcome_message_knowledge_base.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/chat/welcome_message_knowledge_base_setup_error_panel.tsx (100%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/index.tsx
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/lazy_nav_control.tsx
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/page_template.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/prompt_editor/prompt_editor.stories.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/prompt_editor/prompt_editor.tsx (95%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/prompt_editor/prompt_editor_function.tsx (96%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/prompt_editor/prompt_editor_natural_language.tsx (93%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/render_function.tsx (87%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/components/technical_preview_badge.tsx (100%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/context/observability_ai_assistant_app_service_provider.tsx
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/functions/index.ts (54%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/functions/lens.tsx (95%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/functions/visualize_esql.test.tsx (91%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/functions/visualize_esql.tsx (92%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/__storybook_mocks__/use_conversations.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/__storybook_mocks__/use_current_user.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/__storybook_mocks__/use_genai_connectors.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/__storybook_mocks__/use_kibana.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/__storybook_mocks__/use_knowledge_base.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/__storybook_mocks__/use_observability_ai_assistant.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/__storybook_mocks__/use_observability_ai_assistant_chat_service.ts (100%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/is_nav_control_visible.tsx
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_confirm_modal.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_conversation.test.tsx (91%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_conversation.ts (87%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_conversation_key.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_conversation_list.ts (87%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_current_user.ts (73%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_force_update.ts (100%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_genai_connectors.ts
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_json_editor_model.ts (100%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_kibana.ts
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_knowledge_base.tsx (89%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_license.ts (74%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_license_management_locator.ts (66%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_app_service.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_chat_service.ts
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_observability_ai_assistant_params.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/hooks/use_observability_ai_assistant_router.ts (100%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_once.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_theme.ts
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/i18n.ts (100%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/index.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/plugin.tsx
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/routes/config.tsx (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/routes/conversations/conversation_view.tsx (89%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/service/create_app_service.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/types.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/builders.ts
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/utils/create_initialized_object.test.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/utils/create_initialized_object.ts (92%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_mock_chat_service.ts
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/utils/get_role_translation.ts (91%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/utils/get_settings_href.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/utils/get_settings_kb_href.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/utils/get_timeline_items_from_conversation.test.tsx (89%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/utils/get_timeline_items_from_conversation.tsx (93%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/public/utils/safe_json_parse.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant/public/application.tsx => observability_ai_assistant_app/public/utils/shared_providers.tsx} (60%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/storybook_decorator.tsx
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/server/config.ts
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/alerts.ts (94%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/index.ts
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/lens.ts (57%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/correct_common_esql_mistakes.test.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/correct_common_esql_mistakes.ts (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-abs.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-acos.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-asin.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-atan.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-atan2.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-auto_bucket.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-avg.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-case.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-ceil.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-coalesce.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-concat.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-cos.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-cosh.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-count.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-count_distinct.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-date_extract.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-date_format.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-date_parse.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-date_trunc.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-dissect.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-drop.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-e.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-enrich.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-eval.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-floor.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-from.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-greatest.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-grok.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-keep.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-least.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-left.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-length.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-limit.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-limitations.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-log10.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-ltrim.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-max.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-median.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-median_absolute_deviation.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-min.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-mv_avg.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-mv_concat.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-mv_count.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-mv_dedupe.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-mv_expand.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-mv_max.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-mv_median.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-mv_min.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-mv_sum.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-now.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-operators.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-overview.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-percentile.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-pi.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-pow.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-processing-commands.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-rename.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-replace.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-right.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-round.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-row.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-rtrim.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-show.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-sin.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-sinh.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-sort.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-source-commands.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-split.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-sqrt.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-stats.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-substring.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-sum.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-syntax.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-tan.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-tanh.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-tau.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_boolean.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_cartesianpoint.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_datetime.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_degrees.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_double.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_geopoint.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_integer.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_ip.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_long.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_radians.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_string.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_unsigned_long.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-to_version.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-trim.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/esql_docs/esql-where.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/index.ts (95%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/query/system_message.txt (100%)
rename x-pack/plugins/observability_solution/{observability_ai_assistant => observability_ai_assistant_app}/server/functions/visualize_esql.ts (84%)
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/server/index.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/server/plugin.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/server/types.ts
create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant_app/tsconfig.json
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 7ff008e0356d..aee28a182c00 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -569,6 +569,7 @@ test/common/plugins/newsfeed @elastic/kibana-core
src/plugins/no_data_page @elastic/appex-sharedux
x-pack/plugins/notifications @elastic/appex-sharedux
packages/kbn-object-versioning @elastic/appex-sharedux
+x-pack/plugins/observability_solution/observability_ai_assistant_app @elastic/obs-knowledge-team
x-pack/plugins/observability_solution/observability_ai_assistant @elastic/obs-knowledge-team
x-pack/packages/observability/alert_details @elastic/obs-ux-management-team
x-pack/packages/observability/alerting_test_data @elastic/obs-ux-management-team
diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc
index 81c659146853..f8c4e8644e5d 100644
--- a/docs/developer/plugin-list.asciidoc
+++ b/docs/developer/plugin-list.asciidoc
@@ -692,6 +692,10 @@ Elastic.
|This document gives an overview of the features of the Observability AI Assistant at the time of writing, and how to use them. At a high level, the Observability AI Assistant offers contextual insights, and a chat functionality that we enrich with function calling, allowing the LLM to hook into the user's data. We also allow the LLM to store things it considers new information as embeddings into Elasticsearch, and query this knowledge base when it decides it needs more information, using ELSER.
+|{kib-repo}blob/{branch}/x-pack/plugins/observability_solution/observability_ai_assistant_app/README.md[observabilityAIAssistantApp]
+|This app registers defaults functions. It exists as a separate plugin to avoid cyclical dependencies.
+
+
|{kib-repo}blob/{branch}/x-pack/plugins/observability_solution/observability_logs_explorer/README.md[observabilityLogsExplorer]
|This plugin provides an app based on the LogsExplorer component from the logs_explorer plugin, but adds observability-specific affordances.
diff --git a/package.json b/package.json
index 3ca448bdce30..d791b770ce55 100644
--- a/package.json
+++ b/package.json
@@ -588,6 +588,7 @@
"@kbn/no-data-page-plugin": "link:src/plugins/no_data_page",
"@kbn/notifications-plugin": "link:x-pack/plugins/notifications",
"@kbn/object-versioning": "link:packages/kbn-object-versioning",
+ "@kbn/observability-ai-assistant-app-plugin": "link:x-pack/plugins/observability_solution/observability_ai_assistant_app",
"@kbn/observability-ai-assistant-plugin": "link:x-pack/plugins/observability_solution/observability_ai_assistant",
"@kbn/observability-alert-details": "link:x-pack/packages/observability/alert_details",
"@kbn/observability-alerting-test-data": "link:x-pack/packages/observability/alerting_test_data",
diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml
index 8b90dcbbe1a0..d943aa0f7e5a 100644
--- a/packages/kbn-optimizer/limits.yml
+++ b/packages/kbn-optimizer/limits.yml
@@ -104,7 +104,8 @@ pageLoadAssetSize:
newsfeed: 42228
noDataPage: 5000
observability: 115443
- observabilityAIAssistant: 25000
+ observabilityAIAssistant: 58230
+ observabilityAIAssistantApp: 27680
observabilityLogsExplorer: 46650
observabilityOnboarding: 19573
observabilityShared: 72039
diff --git a/src/plugins/ai_assistant_management/observability/public/plugin.ts b/src/plugins/ai_assistant_management/observability/public/plugin.ts
index 36785ebe096c..2f72424cc18e 100644
--- a/src/plugins/ai_assistant_management/observability/public/plugin.ts
+++ b/src/plugins/ai_assistant_management/observability/public/plugin.ts
@@ -14,8 +14,8 @@ import { ServerlessPluginStart } from '@kbn/serverless/public';
import { EnterpriseSearchPublicStart } from '@kbn/enterprise-search-plugin/public';
import type {
- ObservabilityAIAssistantPluginSetup,
- ObservabilityAIAssistantPluginStart,
+ ObservabilityAIAssistantPublicSetup,
+ ObservabilityAIAssistantPublicStart,
} from '@kbn/observability-ai-assistant-plugin/public';
// eslint-disable-next-line @typescript-eslint/no-empty-interface
@@ -27,11 +27,11 @@ export interface AiAssistantManagementObservabilityPluginStart {}
export interface SetupDependencies {
management: ManagementSetup;
home?: HomePublicPluginSetup;
- observabilityAIAssistant?: ObservabilityAIAssistantPluginSetup;
+ observabilityAIAssistant?: ObservabilityAIAssistantPublicSetup;
}
export interface StartDependencies {
- observabilityAIAssistant?: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
serverless?: ServerlessPluginStart;
enterpriseSearch?: EnterpriseSearchPublicStart;
}
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 94bd00f22559..f0c0a36383b5 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -1132,6 +1132,8 @@
"@kbn/notifications-plugin/*": ["x-pack/plugins/notifications/*"],
"@kbn/object-versioning": ["packages/kbn-object-versioning"],
"@kbn/object-versioning/*": ["packages/kbn-object-versioning/*"],
+ "@kbn/observability-ai-assistant-app-plugin": ["x-pack/plugins/observability_solution/observability_ai_assistant_app"],
+ "@kbn/observability-ai-assistant-app-plugin/*": ["x-pack/plugins/observability_solution/observability_ai_assistant_app/*"],
"@kbn/observability-ai-assistant-plugin": ["x-pack/plugins/observability_solution/observability_ai_assistant"],
"@kbn/observability-ai-assistant-plugin/*": ["x-pack/plugins/observability_solution/observability_ai_assistant/*"],
"@kbn/observability-alert-details": ["x-pack/packages/observability/alert_details"],
diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json
index b640b2ac0f8e..b3b25e47fc22 100644
--- a/x-pack/.i18nrc.json
+++ b/x-pack/.i18nrc.json
@@ -2,7 +2,10 @@
"prefix": "xpack",
"paths": {
"xpack.actions": "plugins/actions",
- "xpack.aiops": ["packages/ml/aiops_components", "plugins/aiops"],
+ "xpack.aiops": [
+ "packages/ml/aiops_components",
+ "plugins/aiops"
+ ],
"xpack.alerting": "plugins/alerting",
"xpack.eventLog": "plugins/event_log",
"xpack.stackAlerts": "plugins/stack_alerts",
@@ -33,9 +36,15 @@
"xpack.dataVisualizer": "plugins/data_visualizer",
"xpack.exploratoryView": "plugins/observability_solution/exploratory_view",
"xpack.fileUpload": "plugins/file_upload",
- "xpack.globalSearch": ["plugins/global_search"],
- "xpack.globalSearchBar": ["plugins/global_search_bar"],
- "xpack.graph": ["plugins/graph"],
+ "xpack.globalSearch": [
+ "plugins/global_search"
+ ],
+ "xpack.globalSearchBar": [
+ "plugins/global_search_bar"
+ ],
+ "xpack.graph": [
+ "plugins/graph"
+ ],
"xpack.grokDebugger": "plugins/grokdebugger",
"xpack.idxMgmt": "plugins/index_management",
"xpack.indexLifecycleMgmt": "plugins/index_lifecycle_management",
@@ -50,9 +59,13 @@
"xpack.licenseMgmt": "plugins/license_management",
"xpack.licensing": "plugins/licensing",
"xpack.lists": "plugins/lists",
- "xpack.logstash": ["plugins/logstash"],
+ "xpack.logstash": [
+ "plugins/logstash"
+ ],
"xpack.main": "legacy/plugins/xpack_main",
- "xpack.maps": ["plugins/maps"],
+ "xpack.maps": [
+ "plugins/maps"
+ ],
"xpack.metricsData": "plugins/metrics_data_access",
"xpack.ml": [
"packages/ml/anomaly_utils",
@@ -65,18 +78,31 @@
"packages/ml/ui_actions",
"plugins/ml"
],
- "xpack.monitoring": ["plugins/monitoring"],
+ "xpack.monitoring": [
+ "plugins/monitoring"
+ ],
"xpack.observability": "plugins/observability_solution/observability",
- "xpack.observabilityAiAssistant": "plugins/observability_solution/observability_ai_assistant",
+ "xpack.observabilityAiAssistant": [
+ "plugins/observability_solution/observability_ai_assistant",
+ "plugins/observability_solution/observability_ai_assistant_app"
+ ],
"xpack.observabilityLogsExplorer": "plugins/observability_solution/observability_logs_explorer",
"xpack.observability_onboarding": "plugins/observability_solution/observability_onboarding",
"xpack.observabilityShared": "plugins/observability_solution/observability_shared",
- "xpack.osquery": ["plugins/osquery"],
+ "xpack.osquery": [
+ "plugins/osquery"
+ ],
"xpack.painlessLab": "plugins/painless_lab",
- "xpack.profiling": ["plugins/observability_solution/profiling"],
+ "xpack.profiling": [
+ "plugins/observability_solution/profiling"
+ ],
"xpack.remoteClusters": "plugins/remote_clusters",
- "xpack.reporting": ["plugins/reporting"],
- "xpack.rollupJobs": ["plugins/rollup"],
+ "xpack.reporting": [
+ "plugins/reporting"
+ ],
+ "xpack.rollupJobs": [
+ "plugins/rollup"
+ ],
"xpack.runtimeFields": "plugins/runtime_fields",
"xpack.screenshotting": "plugins/screenshotting",
"xpack.searchProfiler": "plugins/searchprofiler",
@@ -91,20 +117,30 @@
"xpack.sessionView": "plugins/session_view",
"xpack.snapshotRestore": "plugins/snapshot_restore",
"xpack.spaces": "plugins/spaces",
- "xpack.savedObjectsTagging": ["plugins/saved_objects_tagging"],
+ "xpack.savedObjectsTagging": [
+ "plugins/saved_objects_tagging"
+ ],
"xpack.taskManager": "legacy/plugins/task_manager",
"xpack.threatIntelligence": "plugins/threat_intelligence",
"xpack.timelines": "plugins/timelines",
"xpack.transform": "plugins/transform",
"xpack.triggersActionsUI": "plugins/triggers_actions_ui",
"xpack.upgradeAssistant": "plugins/upgrade_assistant",
- "xpack.uptime": ["plugins/observability_solution/uptime"],
- "xpack.synthetics": ["plugins/observability_solution/synthetics"],
- "xpack.ux": ["plugins/observability_solution/ux"],
+ "xpack.uptime": [
+ "plugins/observability_solution/uptime"
+ ],
+ "xpack.synthetics": [
+ "plugins/observability_solution/synthetics"
+ ],
+ "xpack.ux": [
+ "plugins/observability_solution/ux"
+ ],
"xpack.urlDrilldown": "plugins/drilldowns/url_drilldown",
"xpack.watcher": "plugins/watcher"
},
- "exclude": ["examples"],
+ "exclude": [
+ "examples"
+ ],
"translations": [
"@kbn/translations-plugin/translations/zh-CN.json",
"@kbn/translations-plugin/translations/ja-JP.json",
diff --git a/x-pack/plugins/observability_solution/apm/kibana.jsonc b/x-pack/plugins/observability_solution/apm/kibana.jsonc
index 56d7c094ee26..fb50d31acdcf 100644
--- a/x-pack/plugins/observability_solution/apm/kibana.jsonc
+++ b/x-pack/plugins/observability_solution/apm/kibana.jsonc
@@ -56,8 +56,7 @@
"kibanaUtils",
"ml",
"observability",
- "maps",
- "observabilityAIAssistant"
+ "maps"
]
}
}
diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx
index 701050302da2..0c73459970f7 100644
--- a/x-pack/plugins/observability_solution/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx
+++ b/x-pack/plugins/observability_solution/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx
@@ -6,10 +6,7 @@
*/
import { EuiFlexItem, EuiSpacer } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
-import {
- type Message,
- MessageRole,
-} from '@kbn/observability-ai-assistant-plugin/public';
+import type { Message } from '@kbn/observability-ai-assistant-plugin/public';
import React, { useMemo, useState } from 'react';
import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context';
import { APMError } from '../../../../../typings/es_schemas/ui/apm_error';
@@ -25,53 +22,54 @@ export function ErrorSampleContextualInsight({
transaction?: Transaction;
}) {
const {
- observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight },
+ observabilityAIAssistant: {
+ ObservabilityAIAssistantContextualInsight,
+ getContextualInsightMessages,
+ },
} = useApmPluginContext();
const [logStacktrace, setLogStacktrace] = useState('');
const [exceptionStacktrace, setExceptionStacktrace] = useState('');
const messages = useMemo(() => {
- const now = new Date().toISOString();
-
const serviceName = error.service.name;
const languageName = error.service.language?.name ?? '';
const runtimeName = error.service.runtime?.name ?? '';
const runtimeVersion = error.service.runtime?.version ?? '';
const transactionName = transaction?.transaction.name ?? '';
- return [
- {
- '@timestamp': now,
- message: {
- role: MessageRole.User,
- content: `I'm an SRE. I am looking at an exception and trying to understand what it means.
-
-Your task is to describe what the error means and what it could be caused by.
-
-The error occurred on a service called ${serviceName}, which is a ${runtimeName} service written in ${languageName}. The
-runtime version is ${runtimeVersion}.
-
-The request it occurred for is called ${transactionName}.
+ return getContextualInsightMessages({
+ message: `I'm looking at an exception and trying to understand what it means`,
+ instructions: `I'm an SRE. I am looking at an exception and trying to understand what it means.
-${
- logStacktrace
- ? `The log stacktrace:
-${logStacktrace}`
- : ''
-}
-
-${
- exceptionStacktrace
- ? `The exception stacktrace:
-${exceptionStacktrace}`
- : ''
-}
-`,
- },
- },
- ];
- }, [error, transaction, logStacktrace, exceptionStacktrace]);
+ Your task is to describe what the error means and what it could be caused by.
+
+ The error occurred on a service called ${serviceName}, which is a ${runtimeName} service written in ${languageName}. The
+ runtime version is ${runtimeVersion}.
+
+ The request it occurred for is called ${transactionName}.
+
+ ${
+ logStacktrace
+ ? `The log stacktrace:
+ ${logStacktrace}`
+ : ''
+ }
+
+ ${
+ exceptionStacktrace
+ ? `The exception stacktrace:
+ ${exceptionStacktrace}`
+ : ''
+ }`,
+ });
+ }, [
+ error,
+ transaction,
+ logStacktrace,
+ exceptionStacktrace,
+ getContextualInsightMessages,
+ ]);
return ObservabilityAIAssistantContextualInsight && messages ? (
<>
diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/app_root/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/app_root/index.tsx
index 766e9e8c9d44..629f707a3d3d 100644
--- a/x-pack/plugins/observability_solution/apm/public/components/routing/app_root/index.tsx
+++ b/x-pack/plugins/observability_solution/apm/public/components/routing/app_root/index.tsx
@@ -131,7 +131,6 @@ export function ApmAppRoot({
function MountApmHeaderActionMenu() {
const {
appMountParameters: { setHeaderActionMenu, theme$ },
- observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
} = useApmPluginContext();
return (
@@ -140,11 +139,6 @@ function MountApmHeaderActionMenu() {
- {ObservabilityAIAssistantActionMenuItem ? (
-
-
-
- ) : null}
);
diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx
index 09106b92e961..2ae97fdbd1c7 100644
--- a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx
+++ b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx
@@ -66,7 +66,7 @@ export function ApmMainTemplate({
const basePath = http?.basePath.get();
const { config } = useApmPluginContext();
- const aiAssistant = services.observabilityAIAssistant.service;
+ const aiAssistant = services.observabilityAIAssistant;
const ObservabilityPageTemplate = observabilityShared.navigation.PageTemplate;
@@ -119,7 +119,7 @@ export function ApmMainTemplate({
});
useEffect(() => {
- return aiAssistant.setScreenContext({
+ return aiAssistant.service.setScreenContext({
screenDescription: [
hasApmData
? 'The user has APM data.'
diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/settings_template.stories.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/settings_template.stories.tsx
index c3c190bc8d27..eaab08bc09e6 100644
--- a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/settings_template.stories.tsx
+++ b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/settings_template.stories.tsx
@@ -25,9 +25,7 @@ const coreMock = {
},
},
observabilityAIAssistant: {
- service: {
- setScreenContext: () => noop,
- },
+ service: { setScreenContext: () => noop },
},
} as unknown as Partial;
diff --git a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/apm_plugin_context.tsx b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/apm_plugin_context.tsx
index 3fb8f3bacb76..10d7c557ec46 100644
--- a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/apm_plugin_context.tsx
+++ b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/apm_plugin_context.tsx
@@ -15,7 +15,7 @@ import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public';
import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public';
import type { DataPublicPluginStart } from '@kbn/data-plugin/public';
import type { UiActionsStart } from '@kbn/ui-actions-plugin/public';
-import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public';
+import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public';
import { SharePluginSetup } from '@kbn/share-plugin/public';
import type { ApmPluginSetupDeps } from '../../plugin';
import type { ConfigSchema } from '../..';
@@ -33,7 +33,7 @@ export interface ApmPluginContextValue {
data: DataPublicPluginStart;
unifiedSearch: UnifiedSearchPublicPluginStart;
uiActions: UiActionsStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
share: SharePluginSetup;
kibanaEnvironment: KibanaEnvContext;
}
diff --git a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx
index ea18e9550e9a..05033575445a 100644
--- a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx
+++ b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx
@@ -172,9 +172,7 @@ export const mockApmPluginContextValue = {
getTriggerCompatibleActions: () => Promise.resolve([]),
},
observabilityAIAssistant: {
- service: {
- setScreenContext: jest.fn().mockImplementation(() => noop),
- },
+ service: { setScreenContext: jest.fn().mockImplementation(() => noop) },
},
};
diff --git a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_storybook.tsx b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_storybook.tsx
index a358565663aa..08ea56443033 100644
--- a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_storybook.tsx
+++ b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_storybook.tsx
@@ -129,9 +129,7 @@ const mockApmPluginContext = {
core: mockCore,
plugins: mockPlugin,
observabilityAIAssistant: {
- service: {
- setScreenContext: () => noop,
- },
+ service: { setScreenContext: () => noop },
},
} as unknown as ApmPluginContextValue;
diff --git a/x-pack/plugins/observability_solution/apm/public/plugin.ts b/x-pack/plugins/observability_solution/apm/public/plugin.ts
index ede721d072ee..7223ba7045e9 100644
--- a/x-pack/plugins/observability_solution/apm/public/plugin.ts
+++ b/x-pack/plugins/observability_solution/apm/public/plugin.ts
@@ -42,7 +42,7 @@ import { LicenseManagementUIPluginSetup } from '@kbn/license-management-plugin/p
import type { LicensingPluginSetup } from '@kbn/licensing-plugin/public';
import type { MapsStartApi } from '@kbn/maps-plugin/public';
import type { MlPluginSetup, MlPluginStart } from '@kbn/ml-plugin/public';
-import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public';
+import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public';
import {
FetchDataParams,
ObservabilityPublicSetup,
@@ -137,7 +137,7 @@ export interface ApmPluginStartDeps {
lens: LensPublicStart;
uiActions: UiActionsStart;
profiling?: ProfilingPluginStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
dashboard: DashboardStart;
metricsDataAccess: MetricsDataPluginStart;
uiSettings: IUiSettingsClient;
diff --git a/x-pack/plugins/observability_solution/apm/server/assistant_functions/index.ts b/x-pack/plugins/observability_solution/apm/server/assistant_functions/index.ts
index e0ac6710a08b..d4b135460c28 100644
--- a/x-pack/plugins/observability_solution/apm/server/assistant_functions/index.ts
+++ b/x-pack/plugins/observability_solution/apm/server/assistant_functions/index.ts
@@ -8,7 +8,7 @@
import type { CoreSetup } from '@kbn/core-lifecycle-server';
import type { Logger } from '@kbn/logging';
import type {
- ChatRegistrationFunction,
+ RegistrationCallback,
RegisterFunction,
} from '@kbn/observability-ai-assistant-plugin/server/service/types';
import type { IRuleDataClient } from '@kbn/rule-registry-plugin/server';
@@ -47,8 +47,11 @@ export function registerAssistantFunctions({
kibanaVersion: string;
ruleDataClient: IRuleDataClient;
plugins: APMRouteHandlerResources['plugins'];
-}): ChatRegistrationFunction {
- return async ({ resources, registerContext, registerFunction }) => {
+}): RegistrationCallback {
+ return async ({
+ resources,
+ functions: { registerContext, registerFunction },
+ }) => {
const apmRouteHandlerResources: APMRouteHandlerResources = {
context: resources.context,
request: resources.request,
diff --git a/x-pack/plugins/observability_solution/apm/server/types.ts b/x-pack/plugins/observability_solution/apm/server/types.ts
index fa77e52e7683..80237f6012aa 100644
--- a/x-pack/plugins/observability_solution/apm/server/types.ts
+++ b/x-pack/plugins/observability_solution/apm/server/types.ts
@@ -66,8 +66,8 @@ import {
ProfilingDataAccessPluginStart,
} from '@kbn/profiling-data-access-plugin/server';
import type {
- ObservabilityAIAssistantPluginSetup,
- ObservabilityAIAssistantPluginStart,
+ ObservabilityAIAssistantServerSetup,
+ ObservabilityAIAssistantServerStart,
} from '@kbn/observability-ai-assistant-plugin/server';
import { APMConfig } from '.';
@@ -86,7 +86,7 @@ export interface APMPluginSetupDependencies {
metricsDataAccess: MetricsDataPluginSetup;
dataViews: {};
share: SharePluginSetup;
- observabilityAIAssistant: ObservabilityAIAssistantPluginSetup;
+ observabilityAIAssistant: ObservabilityAIAssistantServerSetup;
// optional dependencies
actions?: ActionsPlugin['setup'];
alerting?: AlertingPlugin['setup'];
@@ -112,7 +112,7 @@ export interface APMPluginStartDependencies {
metricsDataAccess: MetricsDataPluginSetup;
dataViews: DataViewsServerPluginStart;
share: undefined;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantServerStart;
// optional dependencies
actions?: ActionsPlugin['start'];
alerting?: AlertingPlugin['start'];
diff --git a/x-pack/plugins/observability_solution/exploratory_view/public/application/types.ts b/x-pack/plugins/observability_solution/exploratory_view/public/application/types.ts
index 08cf568e98dd..e15e86c5f99e 100644
--- a/x-pack/plugins/observability_solution/exploratory_view/public/application/types.ts
+++ b/x-pack/plugins/observability_solution/exploratory_view/public/application/types.ts
@@ -20,7 +20,7 @@ import { EmbeddableStateTransfer } from '@kbn/embeddable-plugin/public';
import { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public';
import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public';
import { DataPublicPluginStart } from '@kbn/data-plugin/public';
-import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public';
+import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public';
import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public';
import { LensPublicStart } from '@kbn/lens-plugin/public';
import { SharePluginStart } from '@kbn/share-plugin/public';
@@ -42,7 +42,7 @@ export interface ObservabilityAppServices {
lens: LensPublicStart;
navigation: NavigationPublicPluginStart;
notifications: NotificationsStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
overlays: OverlayStart;
savedObjectsClient: SavedObjectsStart['client'];
share: SharePluginStart;
diff --git a/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.tsx b/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.tsx
index f0e387a1554d..ee95d2a7f61a 100644
--- a/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.tsx
+++ b/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.tsx
@@ -20,11 +20,7 @@ export function ExpViewActionMenuContent({
timeRange?: { from: string; to: string };
lensAttributes: TypedLensByValueInput['attributes'] | null;
}) {
- const {
- lens,
- isDev,
- observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
- } = useKibana().services;
+ const { lens, isDev } = useKibana().services;
const [isSaveOpen, setIsSaveOpen] = useState(false);
@@ -94,11 +90,6 @@ export function ExpViewActionMenuContent({
})}
- {ObservabilityAIAssistantActionMenuItem ? (
-
-
-
- ) : null}
{isSaveOpen && lensAttributes && (
diff --git a/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/index.tsx b/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/index.tsx
index f28ffb7e493d..7dc9e7b26367 100644
--- a/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/index.tsx
+++ b/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/index.tsx
@@ -11,7 +11,6 @@ import { HeaderMenuPortal } from '@kbn/observability-shared-plugin/public';
import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import { ExpViewActionMenuContent } from './action_menu';
import { useExploratoryView } from '../../contexts/exploratory_view_config';
-import { useKibana } from '../../hooks/use_kibana';
interface Props {
timeRange?: { from: string; to: string };
@@ -20,21 +19,12 @@ interface Props {
export function ExpViewActionMenu(props: Props) {
const { setHeaderActionMenu, theme$ } = useExploratoryView();
- const {
- observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
- } = useKibana().services;
-
return (
- {ObservabilityAIAssistantActionMenuItem ? (
-
-
-
- ) : null}
);
diff --git a/x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts b/x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts
index eb5fd4ead150..31c80f8bdf8e 100644
--- a/x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts
+++ b/x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts
@@ -35,7 +35,7 @@ import { SecurityPluginStart } from '@kbn/security-plugin/public';
import { SpacesPluginStart } from '@kbn/spaces-plugin/public';
import { LicensingPluginStart } from '@kbn/licensing-plugin/public';
import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public';
-import { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public';
+import { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public';
import { getExploratoryViewEmbeddable } from './components/shared/exploratory_view/embeddable';
import { createExploratoryViewUrl } from './components/shared/exploratory_view/configurations/exploratory_view_url';
import getAppDataView from './utils/observability_data_views/get_app_data_view';
@@ -68,7 +68,7 @@ export interface ExploratoryViewPublicPluginsStart {
usageCollection: UsageCollectionSetup;
unifiedSearch: UnifiedSearchPublicPluginStart;
home?: HomePublicPluginStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
}
export type ExploratoryViewPublicSetup = ReturnType;
diff --git a/x-pack/plugins/observability_solution/infra/kibana.jsonc b/x-pack/plugins/observability_solution/infra/kibana.jsonc
index dbabc92fd69c..e9bbd5b27e74 100644
--- a/x-pack/plugins/observability_solution/infra/kibana.jsonc
+++ b/x-pack/plugins/observability_solution/infra/kibana.jsonc
@@ -50,7 +50,6 @@
"requiredBundles": [
"unifiedSearch",
"observability",
- "observabilityAIAssistant",
"licenseManagement",
"kibanaUtils",
"kibanaReact",
diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx
index c1f9231a3a1a..2edec4a4aafa 100644
--- a/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx
+++ b/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx
@@ -19,7 +19,7 @@ import {
import { LogRateAnalysisContent, type LogRateAnalysisResultsData } from '@kbn/aiops-plugin/public';
import { Rule } from '@kbn/alerting-plugin/common';
import { TopAlert } from '@kbn/observability-plugin/public';
-import { type Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public';
+import type { Message } from '@kbn/observability-ai-assistant-plugin/public';
import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types';
import { i18n } from '@kbn/i18n';
import { ALERT_END } from '@kbn/rule-data-utils';
@@ -52,7 +52,10 @@ export const LogRateAnalysis: FC = ({ r
const {
dataViews,
logsShared,
- observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight },
+ observabilityAIAssistant: {
+ ObservabilityAIAssistantContextualInsight,
+ getContextualInsightMessages,
+ },
} = services;
const [dataView, setDataView] = useState();
const [esSearchQuery, setEsSearchQuery] = useState();
@@ -194,7 +197,10 @@ export const LogRateAnalysis: FC = ({ r
.map((item) => Object.values(item).join(','))
.join('\n');
- const content = `You are an observability expert using Elastic Observability Suite on call being consulted about a log threshold alert that got triggered by a ${logRateAnalysisType} in log messages. Your job is to take immediate action and proceed with both urgency and precision.
+ return getContextualInsightMessages({
+ message:
+ 'Can you identify possible causes and remediations for these log rate analysis results',
+ instructions: `You are an observability expert using Elastic Observability Suite on call being consulted about a log threshold alert that got triggered by a ${logRateAnalysisType} in log messages. Your job is to take immediate action and proceed with both urgency and precision.
"Log Rate Analysis" is an AIOps feature that uses advanced statistical methods to identify reasons for increases and decreases in log rates. It makes it easy to find and investigate causes of unusual spikes or dips by using the analysis workflow view.
You are using "Log Rate Analysis" and ran the statistical analysis on the log messages which occured during the alert.
You received the following analysis results from "Log Rate Analysis" which list statistically significant co-occuring field/value combinations sorted from most significant (lower p-values) to least significant (higher p-values) that ${
@@ -227,20 +233,9 @@ export const LogRateAnalysis: FC = ({ r
Do not mention individual p-values from the analysis results.
Do not repeat the full list of field names and field values back to the user.
- Do not guess, just say what you are sure of. Do not repeat the given instructions in your output.`;
-
- const now = new Date().toISOString();
-
- return [
- {
- '@timestamp': now,
- message: {
- content,
- role: MessageRole.User,
- },
- },
- ];
- }, [logRateAnalysisParams]);
+ Do not guess, just say what you are sure of. Do not repeat the given instructions in your output.`,
+ });
+ }, [logRateAnalysisParams, getContextualInsightMessages]);
if (!dataView || !esSearchQuery) return null;
diff --git a/x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx b/x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx
index 597f387c627b..9e3101f4ddfb 100644
--- a/x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx
+++ b/x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx
@@ -9,7 +9,7 @@ import { AppMountParameters, CoreStart } from '@kbn/core/public';
import React from 'react';
import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common';
import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
-import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public';
+import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public';
import { Storage } from '@kbn/kibana-utils-plugin/public';
import { NavigationWarningPromptProvider } from '@kbn/observability-shared-plugin/public';
import { TriggersAndActionsUIPublicPluginStart } from '@kbn/triggers-actions-ui-plugin/public';
@@ -28,7 +28,7 @@ export const CommonInfraProviders: React.FC<{
appName: string;
storage: Storage;
triggersActionsUI: TriggersAndActionsUIPublicPluginStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
setHeaderActionMenu: AppMountParameters['setHeaderActionMenu'];
theme$: AppMountParameters['theme$'];
}> = ({
diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/process_row.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/process_row.tsx
index c6f98c6d1422..a953a970219c 100644
--- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/process_row.tsx
+++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/process_row.tsx
@@ -23,7 +23,7 @@ import {
} from '@elastic/eui';
import { euiStyled } from '@kbn/kibana-react-plugin/common';
import useToggle from 'react-use/lib/useToggle';
-import { type Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public';
+import { type Message } from '@kbn/observability-ai-assistant-plugin/public';
import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana';
import { Process } from './types';
import { ProcessRowCharts } from './process_row_charts';
@@ -35,66 +35,62 @@ interface Props {
}
export const ContextualInsightProcessRow = ({ command }: { command: string }) => {
const {
- observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight },
+ observabilityAIAssistant: {
+ ObservabilityAIAssistantContextualInsight,
+ getContextualInsightMessages,
+ },
} = useKibanaContextForPlugin().services;
const explainProcessMessages = useMemo(() => {
if (!command) {
return undefined;
}
- const now = new Date().toISOString();
- return [
- {
- '@timestamp': now,
- message: {
- role: MessageRole.User,
- content: `I am a software engineer. I am trying to understand what a process running on my
- machine does.
- Your task is to first describe what the process is and what its general use cases are. If I also provide you
- with the arguments to the process you should then explain its arguments and how they influence the behaviour
- of the process. If I do not provide any arguments then explain the behaviour of the process when no arguments are
- provided.
- If you do not recognise the process say "No information available for this process". If I provide an argument
- to the process that you do not recognise then say "No information available for this argument" when explaining
- that argument.
- Here is an example with arguments.
- Process: metricbeat -c /etc/metricbeat.yml -d autodiscover,kafka -e -system.hostfs=/hostfs
- Explanation: Metricbeat is part of the Elastic Stack. It is a lightweight shipper that you can install on your
- servers to periodically collect metrics from the operating system and from services running on the server.
- Use cases for Metricbeat generally revolve around infrastructure monitoring. You would typically install
- Metricbeat on your servers to collect metrics from your systems and services. These metrics are then
- used for performance monitoring, anomaly detection, system status checks, etc.
- Here is a breakdown of the arguments used:
- * -c /etc/metricbeat.yml: The -c option is used to specify the configuration file for Metricbeat. In
- this case, /etc/metricbeat.yml is the configuration file. This file contains configurations for what
- metrics to collect and where to send them (e.g., to Elasticsearch or Logstash).
- * -d autodiscover,kafka: The -d option is used to enable debug output for selected components. In
- this case, debug output is enabled for autodiscover and kafka components. The autodiscover feature
- allows Metricbeat to automatically discover services as they get started and stopped in your environment,
- and kafka is presumably a monitored service from which Metricbeat collects metrics.
- * -e: The -e option is used to log to stderr and disable syslog/file output. This is useful for debugging.
- * -system.hostfs=/hostfs: The -system.hostfs option is used to set the mount point of the host’s
- filesystem for use in monitoring a host from within a container. In this case, /hostfs is the mount
- point. When running Metricbeat inside a container, filesystem metrics would be for the container by
- default, but with this option, Metricbeat can get metrics for the host system.
- Here is an example without arguments.
- Process: metricbeat
- Explanation: Metricbeat is part of the Elastic Stack. It is a lightweight shipper that you can install on your
- servers to periodically collect metrics from the operating system and from services running on the server.
- Use cases for Metricbeat generally revolve around infrastructure monitoring. You would typically install
- Metricbeat on your servers to collect metrics from your systems and services. These metrics are then
- used for performance monitoring, anomaly detection, system status checks, etc.
- Running it without any arguments will start the process with the default configuration file, typically
- located at /etc/metricbeat/metricbeat.yml. This file specifies the metrics to be collected and where
- to ship them to.
- Now explain this process to me.
- Process: ${command}
- Explanation:
- `,
- },
- },
- ];
- }, [command]);
+
+ return getContextualInsightMessages({
+ message: `I am a software engineer. I am trying to understand what this process running on my
+ machine does.`,
+ instructions: `Your task is to first describe what the process is and what its general use cases are. If I also provide you
+ with the arguments to the process you should then explain its arguments and how they influence the behaviour
+ of the process. If I do not provide any arguments then explain the behaviour of the process when no arguments are
+ provided.
+ If you do not recognise the process say "No information available for this process". If I provide an argument
+ to the process that you do not recognise then say "No information available for this argument" when explaining
+ that argument.
+ Here is an example with arguments.
+ Process: metricbeat -c /etc/metricbeat.yml -d autodiscover,kafka -e -system.hostfs=/hostfs
+ Explanation: Metricbeat is part of the Elastic Stack. It is a lightweight shipper that you can install on your
+ servers to periodically collect metrics from the operating system and from services running on the server.
+ Use cases for Metricbeat generally revolve around infrastructure monitoring. You would typically install
+ Metricbeat on your servers to collect metrics from your systems and services. These metrics are then
+ used for performance monitoring, anomaly detection, system status checks, etc.
+ Here is a breakdown of the arguments used:
+ * -c /etc/metricbeat.yml: The -c option is used to specify the configuration file for Metricbeat. In
+ this case, /etc/metricbeat.yml is the configuration file. This file contains configurations for what
+ metrics to collect and where to send them (e.g., to Elasticsearch or Logstash).
+ * -d autodiscover,kafka: The -d option is used to enable debug output for selected components. In
+ this case, debug output is enabled for autodiscover and kafka components. The autodiscover feature
+ allows Metricbeat to automatically discover services as they get started and stopped in your environment,
+ and kafka is presumably a monitored service from which Metricbeat collects metrics.
+ * -e: The -e option is used to log to stderr and disable syslog/file output. This is useful for debugging.
+ * -system.hostfs=/hostfs: The -system.hostfs option is used to set the mount point of the host’s
+ filesystem for use in monitoring a host from within a container. In this case, /hostfs is the mount
+ point. When running Metricbeat inside a container, filesystem metrics would be for the container by
+ default, but with this option, Metricbeat can get metrics for the host system.
+ Here is an example without arguments.
+ Process: metricbeat
+ Explanation: Metricbeat is part of the Elastic Stack. It is a lightweight shipper that you can install on your
+ servers to periodically collect metrics from the operating system and from services running on the server.
+ Use cases for Metricbeat generally revolve around infrastructure monitoring. You would typically install
+ Metricbeat on your servers to collect metrics from your systems and services. These metrics are then
+ used for performance monitoring, anomaly detection, system status checks, etc.
+ Running it without any arguments will start the process with the default configuration file, typically
+ located at /etc/metricbeat/metricbeat.yml. This file specifies the metrics to be collected and where
+ to ship them to.
+ Now explain this process to me.
+ Process: ${command}
+ Explanation:`,
+ });
+ }, [command, getContextualInsightMessages]);
return (
<>
{ObservabilityAIAssistantContextualInsight && explainProcessMessages ? (
diff --git a/x-pack/plugins/observability_solution/infra/public/pages/logs/page_content.tsx b/x-pack/plugins/observability_solution/infra/public/pages/logs/page_content.tsx
index 35a887db784e..99de8fc23b5c 100644
--- a/x-pack/plugins/observability_solution/infra/public/pages/logs/page_content.tsx
+++ b/x-pack/plugins/observability_solution/infra/public/pages/logs/page_content.tsx
@@ -31,7 +31,6 @@ export const LogsPageContent: React.FunctionComponent = () => {
const {
application: { getUrlForApp },
- observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
} = useKibanaContextForPlugin().services;
const enableDeveloperRoutes = isDevMode();
@@ -90,11 +89,6 @@ export const LogsPageContent: React.FunctionComponent = () => {
- {ObservabilityAIAssistantActionMenuItem ? (
-
-
-
- ) : null}
)}
diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx
index 841c8a095330..494ad94830ab 100644
--- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx
+++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx
@@ -20,7 +20,6 @@ import {
import { useKibana, useUiSetting } from '@kbn/kibana-react-plugin/public';
import { HeaderMenuPortal, useLinkProps } from '@kbn/observability-shared-plugin/public';
import { enableInfrastructureHostsView } from '@kbn/observability-plugin/common';
-import { useKibanaContextForPlugin } from '../../hooks/use_kibana';
import { MetricsSourceConfigurationProperties } from '../../../common/metrics_sources';
import { HelpCenterContent } from '../../components/help_center_content';
import { useReadOnlyBadge } from '../../hooks/use_readonly_badge';
@@ -48,9 +47,6 @@ const ADD_DATA_LABEL = i18n.translate('xpack.infra.metricsHeaderAddDataButtonLab
});
export const InfrastructurePage = () => {
- const {
- observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
- } = useKibanaContextForPlugin().services;
const config = usePluginConfig();
const uiCapabilities = useKibana().services.application?.capabilities;
const { setHeaderActionMenu, theme$ } = useContext(HeaderActionMenuContext);
@@ -115,11 +111,6 @@ export const InfrastructurePage = () => {
- {ObservabilityAIAssistantActionMenuItem ? (
-
-
-
- ) : null}
)}
diff --git a/x-pack/plugins/observability_solution/infra/public/types.ts b/x-pack/plugins/observability_solution/infra/public/types.ts
index 475e37e9e2ef..bff4d8afb84d 100644
--- a/x-pack/plugins/observability_solution/infra/public/types.ts
+++ b/x-pack/plugins/observability_solution/infra/public/types.ts
@@ -44,7 +44,7 @@ import {
} from '@kbn/logs-shared-plugin/public';
import { FieldFormatsSetup, FieldFormatsStart } from '@kbn/field-formats-plugin/public';
import { LicensingPluginSetup, LicensingPluginStart } from '@kbn/licensing-plugin/public';
-import { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public';
+import { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public';
import type { CloudSetup } from '@kbn/cloud-plugin/public';
import type { LicenseManagementUIPluginSetup } from '@kbn/license-management-plugin/public';
import type { ServerlessPluginStart } from '@kbn/serverless/public';
@@ -96,7 +96,7 @@ export interface InfraClientStartDeps {
ml: MlPluginStart;
observability: ObservabilityPublicStart;
observabilityShared: ObservabilitySharedPluginStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
osquery?: unknown; // OsqueryPluginStart - can't be imported due to cyclic dependency;
share: SharePluginStart;
spaces: SpacesPluginStart;
diff --git a/x-pack/plugins/observability_solution/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx b/x-pack/plugins/observability_solution/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx
index 79adfde85540..3e1b6fced333 100644
--- a/x-pack/plugins/observability_solution/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx
+++ b/x-pack/plugins/observability_solution/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx
@@ -7,10 +7,9 @@
import React, { useMemo } from 'react';
import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
-import {
- type Message,
- MessageRole,
- type ObservabilityAIAssistantPluginStart,
+import type {
+ Message,
+ ObservabilityAIAssistantPublicStart,
} from '@kbn/observability-ai-assistant-plugin/public';
import { LogEntryField } from '../../../common';
import { explainLogMessageTitle, similarLogMessagesTitle } from './translations';
@@ -20,53 +19,47 @@ export interface LogAIAssistantDocument {
}
export interface LogAIAssistantProps {
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
doc: LogAIAssistantDocument | undefined;
}
export const LogAIAssistant = ({
doc,
- observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight },
+ observabilityAIAssistant: {
+ ObservabilityAIAssistantContextualInsight,
+ getContextualInsightMessages,
+ },
}: LogAIAssistantProps) => {
const explainLogMessageMessages = useMemo(() => {
if (!doc) {
return undefined;
}
- const now = new Date().toISOString();
-
- return [
- {
- '@timestamp': now,
- message: {
- role: MessageRole.User,
- content: `I'm looking at a log entry. Can you explain me what the log message means? Where it could be coming from, whether it is expected and whether it is an issue. Here's the context, serialized: ${JSON.stringify(
- { logEntry: { fields: doc.fields } }
- )} `,
+ return getContextualInsightMessages({
+ message:
+ 'Can you explain what this log message means? Where it could be coming from, whether it is expected and whether it is an issue.',
+ instructions: JSON.stringify({
+ logEntry: {
+ fields: doc.fields,
},
- },
- ];
- }, [doc]);
+ }),
+ });
+ }, [doc, getContextualInsightMessages]);
const similarLogMessageMessages = useMemo(() => {
if (!doc) {
return undefined;
}
- const now = new Date().toISOString();
-
const message = doc.fields.find((field) => field.field === 'message')?.value[0];
- return [
- {
- '@timestamp': now,
- message: {
- role: MessageRole.User,
- content: `I'm looking at a log entry. Can you construct a Kibana KQL query that I can enter in the search bar that gives me similar log entries, based on the \`message\` field: ${message}`,
- },
- },
- ];
- }, [doc]);
+ return getContextualInsightMessages({
+ message: `I'm looking at a log entry. Can you construct a Kibana KQL query that I can enter in the search bar that gives me similar log entries, based on the message field?`,
+ instructions: JSON.stringify({
+ message,
+ }),
+ });
+ }, [getContextualInsightMessages, doc]);
return (
diff --git a/x-pack/plugins/observability_solution/logs_shared/public/types.ts b/x-pack/plugins/observability_solution/logs_shared/public/types.ts
index da5d2ec49e62..ad16d788cb6d 100644
--- a/x-pack/plugins/observability_solution/logs_shared/public/types.ts
+++ b/x-pack/plugins/observability_solution/logs_shared/public/types.ts
@@ -8,7 +8,7 @@
import type { CoreSetup, CoreStart, Plugin as PluginClass } from '@kbn/core/public';
import type { DataPublicPluginStart } from '@kbn/data-plugin/public';
import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public';
-import { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public';
+import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public';
import { SharePluginSetup } from '@kbn/share-plugin/public';
import { UiActionsStart } from '@kbn/ui-actions-plugin/public';
@@ -35,7 +35,7 @@ export interface LogsSharedClientSetupDeps {
export interface LogsSharedClientStartDeps {
data: DataPublicPluginStart;
dataViews: DataViewsPublicPluginStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
uiActions: UiActionsStart;
}
diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx
index 7578f0979907..ad9b0f61e4ea 100644
--- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx
+++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx
@@ -18,7 +18,7 @@ import { Rule } from '@kbn/alerting-plugin/common';
import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n-react';
-import { type Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public';
+import type { Message } from '@kbn/observability-ai-assistant-plugin/public';
import { ALERT_END } from '@kbn/rule-data-utils';
import { CustomThresholdRuleTypeParams } from '../../types';
import { TopAlert } from '../../../..';
@@ -47,7 +47,10 @@ export function LogRateAnalysis({
services,
}: AlertDetailsLogRateAnalysisProps) {
const {
- observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight },
+ observabilityAIAssistant: {
+ ObservabilityAIAssistantContextualInsight,
+ getContextualInsightMessages,
+ },
} = services;
const [esSearchQuery, setEsSearchQuery] = useState();
const [logRateAnalysisParams, setLogRateAnalysisParams] = useState<
@@ -162,18 +165,12 @@ export function LogRateAnalysis({
Do not repeat the full list of field names and field values back to the user.
Do not guess, just say what you are sure of. Do not repeat the given instructions in your output.`;
- const now = new Date().toISOString();
-
- return [
- {
- '@timestamp': now,
- message: {
- content,
- role: MessageRole.User,
- },
- },
- ];
- }, [logRateAnalysisParams]);
+ return getContextualInsightMessages({
+ message:
+ 'Can you identify possible causes and remediations for these log rate analysis results',
+ instructions: content,
+ });
+ }, [logRateAnalysisParams, getContextualInsightMessages]);
if (!dataView || !esSearchQuery) return null;
diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx
index 33a00564bc7e..ecc503dca594 100644
--- a/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx
+++ b/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx
@@ -45,7 +45,7 @@ mockUseKibanaReturnValue.services.cases.hooks.useCasesAddToExistingCaseModal.moc
mockUseKibanaReturnValue.services.cases.helpers.canUseCases.mockReturnValue(allCasesPermissions());
-const { ObservabilityAIAssistantActionMenuItem, ObservabilityAIAssistantContextualInsight } =
+const { ObservabilityAIAssistantContextualInsight } =
observabilityAIAssistantPluginMock.createStartContract();
jest.mock('../../../utils/kibana_react', () => ({
@@ -78,7 +78,6 @@ jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({
plugins: {} as ObservabilityPublicPluginsStart,
observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(),
ObservabilityPageTemplate: KibanaPageTemplate,
- ObservabilityAIAssistantActionMenuItem,
ObservabilityAIAssistantContextualInsight,
}));
diff --git a/x-pack/plugins/observability_solution/observability/public/pages/overview/components/header_menu/header_menu.tsx b/x-pack/plugins/observability_solution/observability/public/pages/overview/components/header_menu/header_menu.tsx
index bd916fc31beb..a7ca5fa38ffc 100644
--- a/x-pack/plugins/observability_solution/observability/public/pages/overview/components/header_menu/header_menu.tsx
+++ b/x-pack/plugins/observability_solution/observability/public/pages/overview/components/header_menu/header_menu.tsx
@@ -13,11 +13,7 @@ import { useKibana } from '../../../../utils/kibana_react';
import HeaderMenuPortal from './header_menu_portal';
export function HeaderMenu(): React.ReactElement | null {
- const {
- http,
- theme,
- observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
- } = useKibana().services;
+ const { http, theme } = useKibana().services;
const { appMountParameters } = usePluginContext();
@@ -27,11 +23,6 @@ export function HeaderMenu(): React.ReactElement | null {
theme$={theme.theme$}
>
- {ObservabilityAIAssistantActionMenuItem && (
-
-
-
- )}
({
useLocation: () => ({
@@ -28,7 +28,7 @@ jest.mock('react-router-dom', () => ({
useHistory: jest.fn(),
}));
-const { ObservabilityAIAssistantActionMenuItem, ObservabilityAIAssistantContextualInsight } =
+const { ObservabilityAIAssistantContextualInsight } =
observabilityAIAssistantPluginMock.createStartContract();
describe('APMSection', () => {
@@ -65,7 +65,6 @@ describe('APMSection', () => {
plugins: {} as ObservabilityPublicPluginsStart,
observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(),
ObservabilityPageTemplate: KibanaPageTemplate,
- ObservabilityAIAssistantActionMenuItem,
ObservabilityAIAssistantContextualInsight,
}));
});
diff --git a/x-pack/plugins/observability_solution/observability/public/plugin.ts b/x-pack/plugins/observability_solution/observability/public/plugin.ts
index a9d210742901..74cc276819f3 100644
--- a/x-pack/plugins/observability_solution/observability/public/plugin.ts
+++ b/x-pack/plugins/observability_solution/observability/public/plugin.ts
@@ -53,8 +53,8 @@ import { ExploratoryViewPublicStart } from '@kbn/exploratory-view-plugin/public'
import { GuidedOnboardingPluginStart } from '@kbn/guided-onboarding-plugin/public';
import { LicensingPluginStart } from '@kbn/licensing-plugin/public';
import {
- ObservabilityAIAssistantPluginSetup,
- ObservabilityAIAssistantPluginStart,
+ ObservabilityAIAssistantPublicSetup,
+ ObservabilityAIAssistantPublicStart,
} from '@kbn/observability-ai-assistant-plugin/public';
import { SecurityPluginStart } from '@kbn/security-plugin/public';
import { SpacesPluginStart } from '@kbn/spaces-plugin/public';
@@ -119,7 +119,7 @@ export interface ObservabilityPublicPluginsSetup {
data: DataPublicPluginSetup;
fieldFormats: FieldFormatsSetup;
observabilityShared: ObservabilitySharedPluginSetup;
- observabilityAIAssistant: ObservabilityAIAssistantPluginSetup;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
share: SharePluginSetup;
triggersActionsUi: TriggersAndActionsUIPublicPluginSetup;
home?: HomePublicPluginSetup;
@@ -146,7 +146,7 @@ export interface ObservabilityPublicPluginsStart {
lens: LensPublicStart;
licensing: LicensingPluginStart;
observabilityShared: ObservabilitySharedPluginStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
ruleTypeRegistry: RuleTypeRegistryContract;
security: SecurityPluginStart;
share: SharePluginStart;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts
index b082478bba10..b5588e70638d 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts
@@ -6,7 +6,7 @@
*/
import { i18n } from '@kbn/i18n';
-import { Message } from './types';
+import type { Message } from './types';
export enum StreamingChatResponseEventType {
ChatCompletionChunk = 'chatCompletionChunk',
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/function_visibility.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/function_visibility.ts
new file mode 100644
index 000000000000..65adc60ae88f
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/function_visibility.ts
@@ -0,0 +1,13 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+export enum FunctionVisibility {
+ AssistantOnly = 'assistantOnly',
+ UserOnly = 'userOnly',
+ Internal = 'internal',
+ All = 'all',
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts
new file mode 100644
index 000000000000..ce07d3de0330
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts
@@ -0,0 +1,42 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import type { JSONSchema } from 'json-schema-to-ts';
+import type { Observable } from 'rxjs';
+import { ChatCompletionChunkEvent, MessageAddEvent } from '../conversation_complete';
+import { FunctionVisibility } from './function_visibility';
+export { FunctionVisibility };
+
+export type CompatibleJSONSchema = Exclude;
+
+export interface ContextDefinition {
+ name: string;
+ description: string;
+}
+
+export type FunctionResponse =
+ | {
+ content?: any;
+ data?: any;
+ }
+ | Observable;
+
+export interface FunctionDefinition<
+ TParameters extends CompatibleJSONSchema = CompatibleJSONSchema
+> {
+ name: string;
+ description: string;
+ visibility?: FunctionVisibility;
+ descriptionForUser?: string;
+ parameters: TParameters;
+ contexts: string[];
+}
+
+export type RegisterContextDefinition = (options: ContextDefinition) => void;
+
+export type ContextRegistry = Map;
+export type FunctionRegistry = Map;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts
index 2973552bf8cf..d5881c4a36cc 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts
@@ -4,8 +4,6 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import { FromSchema } from 'json-schema-to-ts';
-import { FunctionVisibility } from '../types';
export enum VisualizeESQLUserIntention {
generateQueryOnly = 'generateQueryOnly',
@@ -26,27 +24,3 @@ export enum VisualizeESQLUserIntention {
export const VISUALIZE_ESQL_USER_INTENTIONS: VisualizeESQLUserIntention[] = Object.values(
VisualizeESQLUserIntention
);
-
-export const visualizeESQLFunction = {
- name: 'visualize_query',
- visibility: FunctionVisibility.UserOnly,
- description: 'Use this function to visualize charts for ES|QL queries.',
- descriptionForUser: 'Use this function to visualize charts for ES|QL queries.',
- parameters: {
- type: 'object',
- additionalProperties: true,
- properties: {
- query: {
- type: 'string',
- },
- intention: {
- type: 'string',
- enum: VISUALIZE_ESQL_USER_INTENTIONS,
- },
- },
- required: ['query', 'intention'],
- } as const,
- contexts: ['core'],
-};
-
-export type VisualizeESQLFunctionArguments = FromSchema;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts
index b51e9a52ee8c..8b939e13627a 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts
@@ -6,5 +6,34 @@
*/
export type { Message, Conversation, KnowledgeBaseEntry } from './types';
-export { KnowledgeBaseEntryRole } from './types';
-export { MessageRole } from './types';
+export type { ConversationCreateRequest } from './types';
+export { KnowledgeBaseEntryRole, MessageRole } from './types';
+export type { FunctionDefinition } from './functions/types';
+export { FunctionVisibility } from './functions/function_visibility';
+export {
+ VISUALIZE_ESQL_USER_INTENTIONS,
+ VisualizeESQLUserIntention,
+} from './functions/visualize_esql';
+
+export type {
+ ChatCompletionChunkEvent,
+ ConversationCreateEvent,
+ ConversationUpdateEvent,
+ MessageAddEvent,
+ ChatCompletionErrorEvent,
+ BufferFlushEvent,
+ StreamingChatResponseEvent,
+ StreamingChatResponseEventWithoutError,
+} from './conversation_complete';
+export {
+ StreamingChatResponseEventType,
+ ChatCompletionErrorCode,
+ ChatCompletionError,
+ createTokenLimitReachedError,
+ createConversationNotFoundError,
+ createInternalServerError,
+ isTokenLimitReachedError,
+ isChatCompletionError,
+} from './conversation_complete';
+
+export { isSupportedConnectorType } from './connectors';
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts
index 563d5aa893df..b32161ca0195 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts
@@ -5,19 +5,6 @@
* 2.0.
*/
-import type { JSONSchema } from 'json-schema-to-ts';
-import type OpenAI from 'openai';
-import type { Observable } from 'rxjs';
-import { ChatCompletionChunkEvent, MessageAddEvent } from './conversation_complete';
-
-export type CreateChatCompletionResponseChunk = Omit & {
- choices: Array<
- Omit & {
- delta: { content?: string; function_call?: { name?: string; arguments?: string } };
- }
- >;
-};
-
export enum MessageRole {
System = 'system',
Assistant = 'assistant',
@@ -90,43 +77,6 @@ export interface KnowledgeBaseEntry {
role: KnowledgeBaseEntryRole;
}
-export type CompatibleJSONSchema = Exclude;
-
-export interface ContextDefinition {
- name: string;
- description: string;
-}
-
-export type FunctionResponse =
- | {
- content?: any;
- data?: any;
- }
- | Observable;
-
-export enum FunctionVisibility {
- AssistantOnly = 'assistantOnly',
- UserOnly = 'userOnly',
- Internal = 'internal',
- All = 'all',
-}
-
-export interface FunctionDefinition<
- TParameters extends CompatibleJSONSchema = CompatibleJSONSchema
-> {
- name: string;
- description: string;
- visibility?: FunctionVisibility;
- descriptionForUser?: string;
- parameters: TParameters;
- contexts: string[];
-}
-
-export type RegisterContextDefinition = (options: ContextDefinition) => void;
-
-export type ContextRegistry = Map;
-export type FunctionRegistry = Map;
-
export interface ObservabilityAIAssistantScreenContext {
screenDescription?: string;
data?: Array<{
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/filter_function_definitions.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/filter_function_definitions.ts
index 3de6c3bce248..63b7661ee105 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/filter_function_definitions.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/filter_function_definitions.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { FunctionDefinition } from '../types';
+import type { FunctionDefinition } from '../functions/types';
export function filterFunctionDefinitions({
contexts,
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/process_openai_stream.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/process_openai_stream.ts
index 8b6ef27ee8eb..97a127abd0a9 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/process_openai_stream.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/process_openai_stream.ts
@@ -4,6 +4,7 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
+import OpenAI from 'openai';
import { filter, map, Observable, tap } from 'rxjs';
import { v4 } from 'uuid';
import {
@@ -12,7 +13,14 @@ import {
createTokenLimitReachedError,
StreamingChatResponseEventType,
} from '../conversation_complete';
-import type { CreateChatCompletionResponseChunk } from '../types';
+
+export type CreateChatCompletionResponseChunk = Omit & {
+ choices: Array<
+ Omit & {
+ delta: { content?: string; function_call?: { name?: string; arguments?: string } };
+ }
+ >;
+};
export function processOpenAiStream() {
return (source: Observable): Observable => {
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/kibana.jsonc b/x-pack/plugins/observability_solution/observability_ai_assistant/kibana.jsonc
index 35ac1eb25167..09b7fb7ec534 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/kibana.jsonc
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/kibana.jsonc
@@ -8,25 +8,15 @@
"browser": true,
"configPath": ["xpack", "observabilityAIAssistant"],
"requiredPlugins": [
- "alerting",
"actions",
- "data",
- "dataViews",
"features",
- "lens",
"licensing",
- "observabilityShared",
- "ruleRegistry",
"security",
- "share",
"taskManager",
- "triggersActionsUi",
- "uiActions",
- "dataViews",
- "ml"
],
"requiredBundles": ["kibanaReact", "kibanaUtils"],
"optionalPlugins": ["cloud", "serverless"],
- "extraPublicDirs": []
+ "extraPublicDirs": [],
+ "runtimePluginDependencies": [ "ml" ]
}
}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts
index c6b382f84db2..86b8f14bde9e 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts
@@ -7,33 +7,17 @@
import type { AnalyticsServiceSetup, AnalyticsServiceStart } from '@kbn/core-analytics-browser';
import type { Message } from '../../common';
-import {
- eventType as chatFeedbackEventType,
- chatFeedbackEventSchema,
- ChatFeedback,
-} from './schemas/chat_feedback';
-import {
- eventType as insightFeedbackEventType,
- insightFeedbackEventSchema,
- InsightFeedback,
-} from './schemas/insight_feedback';
-import {
- eventType as userSentPromptEventType,
- userSentPromptEventSchema,
-} from './schemas/user_sent_prompt';
+import { chatFeedbackEventSchema, ChatFeedback } from './schemas/chat_feedback';
+import { insightFeedbackEventSchema, InsightFeedback } from './schemas/insight_feedback';
+import { userSentPromptEventSchema } from './schemas/user_sent_prompt';
+import { ObservabilityAIAssistantTelemetryEventType } from './telemetry_event_type';
const schemas = [chatFeedbackEventSchema, insightFeedbackEventSchema, userSentPromptEventSchema];
-export const TELEMETRY = {
- [chatFeedbackEventType]: chatFeedbackEventType,
- [insightFeedbackEventType]: insightFeedbackEventType,
- [userSentPromptEventType]: userSentPromptEventType,
-} as const;
-
export type TelemetryEventTypeWithPayload =
- | { type: typeof chatFeedbackEventType; payload: ChatFeedback }
- | { type: typeof insightFeedbackEventType; payload: InsightFeedback }
- | { type: typeof userSentPromptEventType; payload: Message };
+ | { type: ObservabilityAIAssistantTelemetryEventType.ChatFeedback; payload: ChatFeedback }
+ | { type: ObservabilityAIAssistantTelemetryEventType.InsightFeedback; payload: InsightFeedback }
+ | { type: ObservabilityAIAssistantTelemetryEventType.UserSentPromptInChat; payload: Message };
export const registerTelemetryEventTypes = (analytics: AnalyticsServiceSetup) => {
schemas.forEach((schema) => {
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/chat_feedback.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/chat_feedback.ts
index cd302ef68e75..be9c65a8e352 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/chat_feedback.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/chat_feedback.ts
@@ -7,7 +7,8 @@
import type { EventTypeOpts } from '@kbn/analytics-client';
import type { Message, Conversation } from '../../../common';
-import type { Feedback } from '../../components/feedback_buttons';
+import type { Feedback } from '../../components/buttons/feedback_buttons';
+import { ObservabilityAIAssistantTelemetryEventType } from '../telemetry_event_type';
import { messageSchema } from './common';
export interface ChatFeedback {
@@ -18,10 +19,8 @@ export interface ChatFeedback {
conversation: Conversation;
}
-export const eventType = 'observability_ai_assistant_chat_feedback';
-
export const chatFeedbackEventSchema: EventTypeOpts = {
- eventType,
+ eventType: ObservabilityAIAssistantTelemetryEventType.ChatFeedback,
schema: {
messageWithFeedback: {
properties: {
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/insight_feedback.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/insight_feedback.ts
index 5142beaa216a..7f8a37cf95ae 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/insight_feedback.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/insight_feedback.ts
@@ -7,7 +7,8 @@
import type { EventTypeOpts } from '@kbn/analytics-client';
import type { Message } from '../../../common';
-import type { Feedback } from '../../components/feedback_buttons';
+import type { Feedback } from '../../components/buttons/feedback_buttons';
+import { ObservabilityAIAssistantTelemetryEventType } from '../telemetry_event_type';
import { messageSchema } from './common';
export interface InsightFeedback {
@@ -15,10 +16,8 @@ export interface InsightFeedback {
message: Message;
}
-export const eventType = 'observability_ai_assistant_insight_feedback';
-
export const insightFeedbackEventSchema: EventTypeOpts = {
- eventType,
+ eventType: ObservabilityAIAssistantTelemetryEventType.InsightFeedback,
schema: {
feedback: {
type: 'text',
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/user_sent_prompt.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/user_sent_prompt.ts
index 4d24dd146573..b7ce5f2dacb3 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/user_sent_prompt.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/user_sent_prompt.ts
@@ -7,10 +7,10 @@
import type { EventTypeOpts } from '@kbn/analytics-client';
import type { Message } from '../../../common';
+import { ObservabilityAIAssistantTelemetryEventType } from '../telemetry_event_type';
import { messageSchema } from './common';
-export const eventType = 'observability_ai_assistant_user_sent_prompt_in_chat';
export const userSentPromptEventSchema: EventTypeOpts = {
- eventType,
+ eventType: ObservabilityAIAssistantTelemetryEventType.UserSentPromptInChat,
schema: messageSchema,
};
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/telemetry_event_type.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/telemetry_event_type.ts
new file mode 100644
index 000000000000..e15ae317a773
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/telemetry_event_type.ts
@@ -0,0 +1,12 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+export enum ObservabilityAIAssistantTelemetryEventType {
+ ChatFeedback = 'observability_ai_assistant_chat_feedback',
+ InsightFeedback = 'observability_ai_assistant_insight_feedback',
+ UserSentPromptInChat = 'observability_ai_assistant_user_sent_prompt_in_chat',
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx
deleted file mode 100644
index e0f77f598594..000000000000
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/action_menu_item/action_menu_item.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, { useEffect, useMemo, useState } from 'react';
-import datemath from '@elastic/datemath';
-import {
- EuiFlexGroup,
- EuiFlexItem,
- EuiHeaderLink,
- EuiLoadingSpinner,
- useCurrentEuiBreakpoint,
-} from '@elastic/eui';
-import { i18n } from '@kbn/i18n';
-import { css } from '@emotion/css';
-import moment from 'moment';
-import { ObservabilityAIAssistantChatServiceProvider } from '../../context/observability_ai_assistant_chat_service_provider';
-import { useAbortableAsync } from '../../hooks/use_abortable_async';
-import { useObservabilityAIAssistant } from '../../hooks/use_observability_ai_assistant';
-import { AssistantAvatar } from '../assistant_avatar';
-import { ChatFlyout } from '../chat/chat_flyout';
-import { useKibana } from '../../hooks/use_kibana';
-
-const buttonLabelClassName = css`
- display: none;
-`;
-
-export function ObservabilityAIAssistantActionMenuItem() {
- const service = useObservabilityAIAssistant();
- const breakpoint = useCurrentEuiBreakpoint();
-
- const { plugins } = useKibana().services;
-
- const [isOpen, setIsOpen] = useState(false);
-
- const chatService = useAbortableAsync(
- ({ signal }) => {
- if (!isOpen) {
- return Promise.resolve(undefined);
- }
- return service.start({ signal });
- },
- [service, isOpen]
- );
-
- const initialMessages = useMemo(() => [], []);
-
- useEffect(() => {
- const keyboardListener = (event: KeyboardEvent) => {
- if (event.ctrlKey && event.code === 'Semicolon') {
- setIsOpen(true);
- }
- };
-
- window.addEventListener('keypress', keyboardListener);
-
- return () => {
- window.removeEventListener('keypress', keyboardListener);
- };
- }, []);
-
- const { from, to } = plugins.start.data.query.timefilter.timefilter.getTime();
- useEffect(() => {
- const start = datemath.parse(from)?.format() ?? moment().subtract(1, 'day').toISOString();
- const end = datemath.parse(to)?.format() ?? moment().toISOString();
-
- return service.setScreenContext({
- screenDescription: `The user is looking at ${window.location.href}. The current time range is ${start} - ${end}.`,
- });
- }, [service, from, to]);
-
- if (!service.isEnabled()) {
- return null;
- }
-
- return (
- <>
- {
- setIsOpen(() => true);
- }}
- >
-
-
- {!isOpen || chatService.value ? (
-
- ) : (
-
- )}
-
-
- {i18n.translate('xpack.observabilityAiAssistant.actionMenuItemLabel', {
- defaultMessage: 'AI Assistant',
- })}
-
-
-
- {chatService.value ? (
-
- {
- setIsOpen(false);
- }}
- />
-
- ) : null}
- >
- );
-}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx
index 422bd42f16c3..64ac351bad0a 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx
@@ -9,6 +9,7 @@ import React, { ReactNode } from 'react';
export interface AssistantAvatarProps {
size?: keyof typeof sizeMap;
children?: ReactNode;
+ css?: React.SVGProps['css'];
}
export const sizeMap = {
@@ -19,14 +20,16 @@ export const sizeMap = {
xs: 16,
};
-export function AssistantAvatar({ size = 's' }: AssistantAvatarProps) {
+export function AssistantAvatar({ size = 's', css }: AssistantAvatarProps) {
+ const sizePx = sizeMap[size];
return (
-
+
) : null;
}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_header.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_header.stories.tsx
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_header.stories.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_header.stories.tsx
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_header.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_header.tsx
similarity index 98%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_header.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_header.tsx
index 8a9b1458adf4..55ad14e9bfdd 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_header.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_header.tsx
@@ -19,7 +19,7 @@ import {
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { css } from '@emotion/css';
-import { AssistantAvatar } from '../assistant_avatar';
+import { AssistantAvatar } from '@kbn/observability-ai-assistant-plugin/public';
import { ChatActionsMenu } from './chat_actions_menu';
import type { UseGenAIConnectorsResult } from '../../hooks/use_genai_connectors';
import type { FlyoutWidthMode } from './chat_flyout';
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_inline_edit.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_inline_edit.tsx
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_inline_edit.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_inline_edit.tsx
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item.tsx
similarity index 93%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item.tsx
index ea8cc1eb1791..a1f5d5eb88d2 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item.tsx
@@ -14,17 +14,19 @@ import {
EuiPanel,
useGeneratedHtmlId,
} from '@elastic/eui';
+import { Message } from '@kbn/observability-ai-assistant-plugin/common';
+import {
+ ChatActionClickHandler,
+ ChatItemControls,
+ FailedToLoadResponse,
+ Feedback,
+ TelemetryEventTypeWithPayload,
+} from '@kbn/observability-ai-assistant-plugin/public';
import { ChatItemActions } from './chat_item_actions';
import { ChatItemAvatar } from './chat_item_avatar';
import { ChatItemContentInlinePromptEditor } from './chat_item_content_inline_prompt_editor';
-import { ChatItemControls } from './chat_item_controls';
import { ChatTimelineItem } from './chat_timeline';
import { getRoleTranslation } from '../../utils/get_role_translation';
-import { FailedToLoadResponse } from '../message_panel/failed_to_load_response';
-import type { Message } from '../../../common';
-import type { Feedback } from '../feedback_buttons';
-import type { ChatActionClickHandler } from './types';
-import type { TelemetryEventTypeWithPayload } from '../../analytics';
export interface ChatItemProps extends Omit {
onActionClick: ChatActionClickHandler;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_actions.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_actions.tsx
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_actions.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_actions.tsx
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_avatar.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_avatar.tsx
similarity index 92%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_avatar.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_avatar.tsx
index d04f818bb204..d286fb7e3917 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_avatar.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_avatar.tsx
@@ -9,8 +9,7 @@ import React from 'react';
import { UserAvatar } from '@kbn/user-profile-components';
import { EuiAvatar, EuiLoadingSpinner } from '@elastic/eui';
import type { AuthenticatedUser } from '@kbn/security-plugin/common';
-import { AssistantAvatar } from '../assistant_avatar';
-import { MessageRole } from '../../../common/types';
+import { AssistantAvatar, MessageRole } from '@kbn/observability-ai-assistant-plugin/public';
interface ChatAvatarProps {
currentUser?: Pick | undefined;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_content_inline_prompt_editor.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_content_inline_prompt_editor.tsx
similarity index 88%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_content_inline_prompt_editor.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_content_inline_prompt_editor.tsx
index 2b69514fd471..47c0d6d7ec16 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_content_inline_prompt_editor.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_content_inline_prompt_editor.tsx
@@ -9,11 +9,13 @@ import React from 'react';
import { noop } from 'lodash';
import { css } from '@emotion/css';
import { EuiPanel } from '@elastic/eui';
-import { MessageText } from '../message_panel/message_text';
+import { Message } from '@kbn/observability-ai-assistant-plugin/common';
+import {
+ ChatActionClickHandler,
+ MessageText,
+ TelemetryEventTypeWithPayload,
+} from '@kbn/observability-ai-assistant-plugin/public';
import { PromptEditor } from '../prompt_editor/prompt_editor';
-import type { Message } from '../../../common';
-import type { ChatActionClickHandler } from './types';
-import type { TelemetryEventTypeWithPayload } from '../../analytics';
interface Props {
editing: boolean;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_title.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_title.tsx
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_title.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_title.tsx
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.stories.tsx
similarity index 91%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.stories.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.stories.tsx
index cb7e9366ea92..88354f41ba29 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.stories.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.stories.tsx
@@ -6,18 +6,20 @@
*/
import { EuiButton, EuiSpacer } from '@elastic/eui';
-import { ComponentStory } from '@storybook/react';
-import React, { ComponentProps, useState } from 'react';
-import { MessageRole } from '../../../common';
-import { ChatState } from '../../hooks/use_chat';
-import { ObservabilityAIAssistantChatService } from '../../types';
+import type { ComponentStory } from '@storybook/react';
+import React, { type ComponentProps, useState } from 'react';
+import {
+ MessageRole,
+ type ObservabilityAIAssistantChatService,
+} from '@kbn/observability-ai-assistant-plugin/public';
+import { ChatState } from '@kbn/observability-ai-assistant-plugin/public';
import {
buildAssistantMessage,
buildFunctionResponseMessage,
buildSystemMessage,
buildUserMessage,
} from '../../utils/builders';
-import { ChatTimeline as Component, ChatTimelineProps } from './chat_timeline';
+import { ChatTimeline as Component, type ChatTimelineProps } from './chat_timeline';
export default {
component: Component,
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.tsx
similarity index 86%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.tsx
index 05a188e005f9..ec2cf2ca68e7 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.tsx
@@ -5,24 +5,23 @@
* 2.0.
*/
-import React, { ReactNode, useMemo } from 'react';
+import React, { type ReactNode, useMemo } from 'react';
import { css } from '@emotion/css';
import { EuiCommentList } from '@elastic/eui';
import type { AuthenticatedUser } from '@kbn/security-plugin/common';
import { omit } from 'lodash';
-import type { Feedback } from '../feedback_buttons';
-import type { Message } from '../../../common';
+import type { Message } from '@kbn/observability-ai-assistant-plugin/common';
+import {
+ ChatActionClickPayload,
+ ChatState,
+ type Feedback,
+ type ObservabilityAIAssistantChatService,
+ type TelemetryEventTypeWithPayload,
+} from '@kbn/observability-ai-assistant-plugin/public';
import type { UseKnowledgeBaseResult } from '../../hooks/use_knowledge_base';
-import type { ChatActionClickPayload } from './types';
-import type { ObservabilityAIAssistantChatService } from '../../types';
-import type { TelemetryEventTypeWithPayload } from '../../analytics';
import { ChatItem } from './chat_item';
import { ChatConsolidatedItems } from './chat_consolidated_items';
-import { ChatState } from '../../hooks/use_chat';
-import {
- getTimelineItemsfromConversation,
- StartedFrom,
-} from '../../utils/get_timeline_items_from_conversation';
+import { getTimelineItemsfromConversation } from '../../utils/get_timeline_items_from_conversation';
export interface ChatTimelineItem
extends Pick {
@@ -53,7 +52,6 @@ export interface ChatTimelineProps {
hasConnector: boolean;
chatState: ChatState;
currentUser?: Pick;
- startedFrom?: StartedFrom;
onEdit: (message: Message, messageAfterEdit: Message) => void;
onFeedback: (message: Message, feedback: Feedback) => void;
onRegenerate: (message: Message) => void;
@@ -73,7 +71,6 @@ export function ChatTimeline({
chatService,
hasConnector,
currentUser,
- startedFrom,
onEdit,
onFeedback,
onRegenerate,
@@ -88,7 +85,6 @@ export function ChatTimeline({
hasConnector,
messages,
currentUser,
- startedFrom,
chatState,
onActionClick,
});
@@ -113,7 +109,7 @@ export function ChatTimeline({
}
return consolidatedChatItems;
- }, [chatService, hasConnector, messages, currentUser, startedFrom, chatState, onActionClick]);
+ }, [chatService, hasConnector, messages, currentUser, chatState, onActionClick]);
return (
{
+ return hasBeenOpened ? service.start({ signal }) : undefined;
+ },
+ [service, hasBeenOpened]
+ );
+
+ const [isOpen, setIsOpen] = useState(false);
+
+ const keyRef = useRef(v4());
+
+ const { isVisible } = useIsNavControlVisible();
+
+ useEffect(() => {
+ const conversationSubscription = service.conversations.predefinedConversation$.subscribe(() => {
+ setHasBeenOpened(true);
+ setIsOpen(true);
+ });
+
+ return () => {
+ conversationSubscription.unsubscribe();
+ };
+ }, [service.conversations.predefinedConversation$]);
+
+ const { messages, title } = useObservable(service.conversations.predefinedConversation$) ?? {
+ messages: [],
+ title: undefined,
+ };
+
+ const theme = useTheme();
+
+ const buttonCss = css`
+ padding: 0px 8px;
+
+ svg path {
+ fill: ${theme.colors.darkestShade};
+ }
+ `;
+
+ if (!isVisible) {
+ return null;
+ }
+
+ return (
+ <>
+ {
+ service.conversations.openNewConversation({
+ messages: [],
+ });
+ }}
+ color="primary"
+ size="s"
+ fullWidth={false}
+ minWidth={0}
+ >
+
+
+ {chatService.value ? (
+
+ {
+ setIsOpen(false);
+ }}
+ />
+
+ ) : undefined}
+ >
+ );
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/lazy_nav_control.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/lazy_nav_control.tsx
new file mode 100644
index 000000000000..77086a9bf73a
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/lazy_nav_control.tsx
@@ -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 { withSuspense } from '@kbn/shared-ux-utility';
+import { lazy } from 'react';
+
+export const LazyNavControl = withSuspense(
+ lazy(() => import('.').then((m) => ({ default: m.NavControl })))
+);
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/page_template.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/page_template.tsx
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/page_template.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/page_template.tsx
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.stories.tsx
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor.stories.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.stories.tsx
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.tsx
similarity index 95%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.tsx
index 9110649b4b9b..9066c72278be 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.tsx
@@ -8,9 +8,13 @@
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
import { i18n } from '@kbn/i18n';
import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem, keys } from '@elastic/eui';
-import { MessageRole, type Message } from '../../../common';
+import {
+ type Message,
+ MessageRole,
+ type TelemetryEventTypeWithPayload,
+ ObservabilityAIAssistantTelemetryEventType,
+} from '@kbn/observability-ai-assistant-plugin/public';
import { FunctionListPopover } from '../chat/function_list_popover';
-import { TelemetryEventTypeWithPayload, TELEMETRY } from '../../analytics';
import { PromptEditorFunction } from './prompt_editor_function';
import { PromptEditorNaturalLanguage } from './prompt_editor_natural_language';
@@ -112,7 +116,7 @@ export function PromptEditor({
setMode('prompt');
onSendTelemetry({
- type: TELEMETRY.observability_ai_assistant_user_sent_prompt_in_chat,
+ type: ObservabilityAIAssistantTelemetryEventType.UserSentPromptInChat,
payload: message,
});
} catch (_) {
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_function.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_function.tsx
similarity index 96%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_function.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_function.tsx
index c828843ee717..6691200845ff 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_function.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_function.tsx
@@ -11,8 +11,9 @@ import { CodeEditor } from '@kbn/code-editor';
import { monaco } from '@kbn/monaco';
import { i18n } from '@kbn/i18n';
import { EuiCode, EuiPanel } from '@elastic/eui';
+import { MessageRole } from '@kbn/observability-ai-assistant-plugin/public';
+import type { Message } from '@kbn/observability-ai-assistant-plugin/common';
import { useJsonEditorModel } from '../../hooks/use_json_editor_model';
-import { type Message, MessageRole } from '../../../common';
export interface Props {
functionName: string;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_natural_language.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_natural_language.tsx
similarity index 93%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_natural_language.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_natural_language.tsx
index 6d752ce95e1f..bba80817566f 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_natural_language.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_natural_language.tsx
@@ -7,7 +7,8 @@
import React, { useCallback, useEffect, useRef } from 'react';
import { EuiTextArea } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
-import { type Message, MessageRole } from '../../../common';
+import { MessageRole } from '@kbn/observability-ai-assistant-plugin/public';
+import type { Message } from '@kbn/observability-ai-assistant-plugin/common';
interface Props {
disabled: boolean;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/render_function.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/render_function.tsx
similarity index 87%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/render_function.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/render_function.tsx
index eded1c30e59e..c9aaac67e1fb 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/render_function.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/render_function.tsx
@@ -5,9 +5,11 @@
* 2.0.
*/
import React from 'react';
-import { Message } from '../../common';
+import type {
+ ChatActionClickHandler,
+ Message,
+} from '@kbn/observability-ai-assistant-plugin/public';
import { useObservabilityAIAssistantChatService } from '../hooks/use_observability_ai_assistant_chat_service';
-import type { ChatActionClickHandler } from './chat/types';
interface Props {
name: string;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/technical_preview_badge.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/technical_preview_badge.tsx
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/technical_preview_badge.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/technical_preview_badge.tsx
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/context/observability_ai_assistant_app_service_provider.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/context/observability_ai_assistant_app_service_provider.tsx
new file mode 100644
index 000000000000..9de7f023b4d1
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/context/observability_ai_assistant_app_service_provider.tsx
@@ -0,0 +1,16 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { createContext } from 'react';
+import type { ObservabilityAIAssistantAppService } from '../service/create_app_service';
+
+export const ObservabilityAIAssistantAppServiceContext = createContext<
+ ObservabilityAIAssistantAppService | undefined
+>(undefined);
+
+export const ObservabilityAIAssistantAppServiceProvider =
+ ObservabilityAIAssistantAppServiceContext.Provider;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/index.ts
similarity index 54%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/index.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/index.ts
index 056744fa101a..f60007a29284 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/index.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/index.ts
@@ -5,23 +5,18 @@
* 2.0.
*/
-import type {
- ObservabilityAIAssistantPluginStartDependencies,
- ObservabilityAIAssistantService,
- RegisterRenderFunctionDefinition,
-} from '../types';
+import type { RegisterRenderFunctionDefinition } from '@kbn/observability-ai-assistant-plugin/public/types';
+import type { ObservabilityAIAssistantAppPluginStartDependencies } from '../types';
import { registerLensRenderFunction } from './lens';
import { registerVisualizeQueryRenderFunction } from './visualize_esql';
export async function registerFunctions({
registerRenderFunction,
- service,
pluginsStart,
}: {
registerRenderFunction: RegisterRenderFunctionDefinition;
- service: ObservabilityAIAssistantService;
- pluginsStart: ObservabilityAIAssistantPluginStartDependencies;
+ pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies;
}) {
- registerLensRenderFunction({ service, pluginsStart, registerRenderFunction });
- registerVisualizeQueryRenderFunction({ service, pluginsStart, registerRenderFunction });
+ registerLensRenderFunction({ pluginsStart, registerRenderFunction });
+ registerVisualizeQueryRenderFunction({ pluginsStart, registerRenderFunction });
}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/lens.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/lens.tsx
similarity index 95%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/lens.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/lens.tsx
index 22d4b91a5f90..cd2a522755f6 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/lens.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/lens.tsx
@@ -12,13 +12,12 @@ import type { LensEmbeddableInput, LensPublicStart } from '@kbn/lens-plugin/publ
import React, { useState } from 'react';
import useAsync from 'react-use/lib/useAsync';
import { Assign } from 'utility-types';
-import type { LensFunctionArguments } from '../../common/functions/lens';
-import type {
- ObservabilityAIAssistantPluginStartDependencies,
- ObservabilityAIAssistantService,
+import {
RegisterRenderFunctionDefinition,
RenderFunction,
-} from '../types';
+} from '@kbn/observability-ai-assistant-plugin/public/types';
+import type { LensFunctionArguments } from '../../common/functions/lens';
+import { ObservabilityAIAssistantAppPluginStartDependencies } from '../types';
export enum SeriesType {
Bar = 'bar',
@@ -139,13 +138,11 @@ function Lens({
}
export function registerLensRenderFunction({
- service,
registerRenderFunction,
pluginsStart,
}: {
- service: ObservabilityAIAssistantService;
registerRenderFunction: RegisterRenderFunctionDefinition;
- pluginsStart: ObservabilityAIAssistantPluginStartDependencies;
+ pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies;
}) {
registerRenderFunction(
'lens',
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.test.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.test.tsx
similarity index 91%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.test.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.test.tsx
index de7c4f04f241..dc17678741c1 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.test.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.test.tsx
@@ -12,7 +12,6 @@ import type { LensPublicStart } from '@kbn/lens-plugin/public';
import { lensPluginMock } from '@kbn/lens-plugin/public/mocks/lens_plugin_mock';
import { uiActionsPluginMock } from '@kbn/ui-actions-plugin/public/mocks';
import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks';
-import { ObservabilityAIAssistantMultipaneFlyoutProvider } from '../context/observability_ai_assistant_multipane_flyout_provider';
import { VisualizeESQL } from './visualize_esql';
describe('VisualizeESQL', () => {
@@ -50,8 +49,11 @@ describe('VisualizeESQL', () => {
},
},
] as DatatableColumn[];
+
+ const ObservabilityAIAssistantMultipaneFlyoutContext = React.createContext(undefined);
+
render(
- {
query={'from foo | keep bytes, destination'}
onActionClick={jest.fn()}
userOverrides={userOverrides}
+ ObservabilityAIAssistantMultipaneFlyoutContext={
+ ObservabilityAIAssistantMultipaneFlyoutContext
+ }
/>
-
+
);
}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.tsx
similarity index 92%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.tsx
index 9544459a3519..eb302811d96a 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.tsx
@@ -4,40 +4,40 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import { v4 as uuidv4 } from 'uuid';
-import { i18n } from '@kbn/i18n';
import {
+ EuiButtonIcon,
EuiFlexGroup,
EuiFlexItem,
EuiLoadingSpinner,
EuiToolTip,
- EuiButtonIcon,
} from '@elastic/eui';
import type { DataViewsServicePublic } from '@kbn/data-views-plugin/public/types';
-import type { UiActionsStart } from '@kbn/ui-actions-plugin/public';
+import { getESQLAdHocDataview, getIndexPatternFromESQLQuery } from '@kbn/esql-utils';
import type { DatatableColumn } from '@kbn/expressions-plugin/common';
-import { getLensAttributesFromSuggestion } from '@kbn/visualization-utils';
+import { i18n } from '@kbn/i18n';
import type {
+ InlineEditLensEmbeddableContext,
LensPublicStart,
TypedLensByValueInput,
- InlineEditLensEmbeddableContext,
} from '@kbn/lens-plugin/public';
-import React, { useState, useEffect, useCallback, useMemo, useContext } from 'react';
-import ReactDOM from 'react-dom';
-import useAsync from 'react-use/lib/useAsync';
-import { getIndexPatternFromESQLQuery, getESQLAdHocDataview } from '@kbn/esql-utils';
-import {
- VisualizeESQLFunctionArguments,
- VisualizeESQLUserIntention,
-} from '../../common/functions/visualize_esql';
-import { ObservabilityAIAssistantMultipaneFlyoutContext } from '../context/observability_ai_assistant_multipane_flyout_provider';
import type {
- ObservabilityAIAssistantPluginStartDependencies,
- ObservabilityAIAssistantService,
+ ChatActionClickHandler,
+ ObservabilityAIAssistantPublicStart,
RegisterRenderFunctionDefinition,
RenderFunction,
-} from '../types';
-import { type ChatActionClickHandler, ChatActionClickType } from '../components/chat/types';
+} from '@kbn/observability-ai-assistant-plugin/public';
+import {
+ ChatActionClickType,
+ VisualizeESQLUserIntention,
+} from '@kbn/observability-ai-assistant-plugin/public';
+import type { UiActionsStart } from '@kbn/ui-actions-plugin/public';
+import { getLensAttributesFromSuggestion } from '@kbn/visualization-utils';
+import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';
+import ReactDOM from 'react-dom';
+import useAsync from 'react-use/lib/useAsync';
+import { v4 as uuidv4 } from 'uuid';
+import { VisualizeESQLFunctionArguments } from '../../common/functions/visualize_esql';
+import { ObservabilityAIAssistantAppPluginStartDependencies } from '../types';
enum ChartType {
XY = 'XY',
@@ -87,6 +87,7 @@ interface VisualizeESQLProps {
userOverrides?: unknown;
/** User's preferation chart type as it comes from the model */
preferredChartType?: ChartType;
+ ObservabilityAIAssistantMultipaneFlyoutContext: ObservabilityAIAssistantPublicStart['ObservabilityAIAssistantMultipaneFlyoutContext'];
}
function generateId() {
@@ -102,6 +103,7 @@ export function VisualizeESQL({
onActionClick,
userOverrides,
preferredChartType,
+ ObservabilityAIAssistantMultipaneFlyoutContext,
}: VisualizeESQLProps) {
// fetch the pattern from the query
const indexPattern = getIndexPatternFromESQLQuery(query);
@@ -158,6 +160,7 @@ export function VisualizeESQL({
[],
preferredChartType
);
+
if (chartSuggestions?.length) {
const [suggestion] = chartSuggestions;
@@ -301,13 +304,11 @@ export function VisualizeESQL({
}
export function registerVisualizeQueryRenderFunction({
- service,
registerRenderFunction,
pluginsStart,
}: {
- service: ObservabilityAIAssistantService;
registerRenderFunction: RegisterRenderFunctionDefinition;
- pluginsStart: ObservabilityAIAssistantPluginStartDependencies;
+ pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies;
}) {
registerRenderFunction(
'visualize_query',
@@ -377,6 +378,9 @@ export function registerVisualizeQueryRenderFunction({
return (
{
+ const appSubscription = combineLatest([currentAppId$, applications$]).subscribe({
+ next: ([appId, applications]) => {
+ const isObservabilityApp =
+ appId &&
+ applications.get(appId)?.category?.id === DEFAULT_APP_CATEGORIES.observability.id;
+
+ setIsVisible(!!isObservabilityApp);
+ },
+ });
+
+ return appSubscription.unsubscribe;
+ }, [currentAppId$, applications$]);
+
+ return {
+ isVisible,
+ };
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_confirm_modal.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_confirm_modal.tsx
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_confirm_modal.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_confirm_modal.tsx
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.test.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.test.tsx
similarity index 91%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.test.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.test.tsx
index 74bd34c3d593..2f7d872d191d 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.test.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.test.tsx
@@ -13,38 +13,47 @@ import {
} from '@testing-library/react-hooks';
import { merge } from 'lodash';
import React from 'react';
-import { Subject } from 'rxjs';
-import { MessageRole } from '../../common';
+import { Observable, Subject } from 'rxjs';
import {
+ MessageRole,
StreamingChatResponseEventType,
StreamingChatResponseEventWithoutError,
-} from '../../common/conversation_complete';
-import { ObservabilityAIAssistantProvider } from '../context/observability_ai_assistant_provider';
+} from '@kbn/observability-ai-assistant-plugin/common';
+import { ObservabilityAIAssistantAppServiceProvider } from '../context/observability_ai_assistant_app_service_provider';
import { EMPTY_CONVERSATION_TITLE } from '../i18n';
-import { createMockChatService } from '../service/create_mock_chat_service';
-import type { ObservabilityAIAssistantService } from '../types';
-import { ChatState } from './use_chat';
+import type { ObservabilityAIAssistantAppService } from '../service/create_app_service';
import {
useConversation,
type UseConversationProps,
type UseConversationResult,
} from './use_conversation';
import * as useKibanaModule from './use_kibana';
+import { ChatState } from '@kbn/observability-ai-assistant-plugin/public';
+import { createMockChatService } from '../utils/create_mock_chat_service';
+import { createUseChat } from '@kbn/observability-ai-assistant-plugin/public/hooks/use_chat';
+import type { NotificationsStart } from '@kbn/core/public';
let hookResult: RenderHookResult;
-type MockedService = DeeplyMockedKeys;
+type MockedService = DeeplyMockedKeys> & {
+ conversations: DeeplyMockedKeys<
+ Omit
+ > & {
+ predefinedConversation$: Observable;
+ };
+};
const mockService: MockedService = {
callApi: jest.fn(),
- getCurrentUser: jest.fn(),
- getLicense: jest.fn(),
- getLicenseManagementLocator: jest.fn(),
isEnabled: jest.fn(),
start: jest.fn(),
register: jest.fn(),
setScreenContext: jest.fn(),
getScreenContexts: jest.fn(),
+ conversations: {
+ openNewConversation: jest.fn(),
+ predefinedConversation$: new Observable(),
+ },
};
const mockChatService = createMockChatService();
@@ -53,9 +62,17 @@ const addErrorMock = jest.fn();
jest.spyOn(useKibanaModule, 'useKibana').mockReturnValue({
services: {
- notifications: {
- toasts: {
- addError: addErrorMock,
+ plugins: {
+ start: {
+ observabilityAIAssistant: {
+ useChat: createUseChat({
+ notifications: {
+ toasts: {
+ addError: addErrorMock,
+ },
+ } as unknown as NotificationsStart,
+ }),
+ },
},
},
},
@@ -67,9 +84,9 @@ describe('useConversation', () => {
beforeEach(() => {
jest.clearAllMocks();
wrapper = ({ children }) => (
-
+
{children}
-
+
);
});
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.ts
similarity index 87%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.ts
index df3c59a316ad..9dd5dc66c1ef 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.ts
@@ -7,15 +7,21 @@
import { i18n } from '@kbn/i18n';
import { merge, omit } from 'lodash';
import { useState } from 'react';
-import type { Conversation, Message } from '../../common';
-import type { ConversationCreateRequest } from '../../common/types';
+import type {
+ Conversation,
+ ConversationCreateRequest,
+ Message,
+} from '@kbn/observability-ai-assistant-plugin/common';
+import {
+ ObservabilityAIAssistantChatService,
+ useAbortableAsync,
+} from '@kbn/observability-ai-assistant-plugin/public';
+import type { AbortableAsyncState } from '@kbn/observability-ai-assistant-plugin/public';
+import type { UseChatResult } from '@kbn/observability-ai-assistant-plugin/public';
import { EMPTY_CONVERSATION_TITLE } from '../i18n';
-import type { ObservabilityAIAssistantChatService } from '../types';
-import { useAbortableAsync, type AbortableAsyncState } from './use_abortable_async';
-import { useChat, UseChatResult } from './use_chat';
import { useKibana } from './use_kibana';
-import { useObservabilityAIAssistant } from './use_observability_ai_assistant';
import { useOnce } from './use_once';
+import { useObservabilityAIAssistantAppService } from './use_observability_ai_assistant_app_service';
function createNewConversation({
title = EMPTY_CONVERSATION_TITLE,
@@ -56,10 +62,17 @@ export function useConversation({
connectorId,
onConversationUpdate,
}: UseConversationProps): UseConversationResult {
- const service = useObservabilityAIAssistant();
+ const service = useObservabilityAIAssistantAppService();
const {
- services: { notifications },
+ services: {
+ notifications,
+ plugins: {
+ start: {
+ observabilityAIAssistant: { useChat },
+ },
+ },
+ },
} = useKibana();
const initialConversationId = useOnce(initialConversationIdFromProps);
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation_key.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation_key.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation_key.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation_key.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation_list.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation_list.ts
similarity index 87%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation_list.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation_list.ts
index f3b251fc2cdf..6fa6bc02e7b3 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation_list.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation_list.ts
@@ -7,10 +7,13 @@
import { useEffect, useState } from 'react';
import { i18n } from '@kbn/i18n';
-import { Conversation } from '../../common';
-import { AbortableAsyncState, useAbortableAsync } from './use_abortable_async';
+import {
+ type AbortableAsyncState,
+ type Conversation,
+ useAbortableAsync,
+} from '@kbn/observability-ai-assistant-plugin/public';
import { useKibana } from './use_kibana';
-import { useObservabilityAIAssistant } from './use_observability_ai_assistant';
+import { useObservabilityAIAssistantAppService } from './use_observability_ai_assistant_app_service';
export interface UseConversationListResult {
isLoading: boolean;
@@ -19,7 +22,7 @@ export interface UseConversationListResult {
}
export function useConversationList(): UseConversationListResult {
- const service = useObservabilityAIAssistant();
+ const service = useObservabilityAIAssistantAppService();
const [isUpdatingList, setIsUpdatingList] = useState(false);
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_current_user.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_current_user.ts
similarity index 73%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_current_user.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_current_user.ts
index 6414e7f604f6..1ca539eb8837 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_current_user.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_current_user.ts
@@ -7,24 +7,30 @@
import { AuthenticatedUser } from '@kbn/security-plugin/common';
import { useEffect, useState } from 'react';
-import { useObservabilityAIAssistant } from './use_observability_ai_assistant';
+import { useKibana } from './use_kibana';
export function useCurrentUser() {
- const service = useObservabilityAIAssistant();
+ const {
+ services: {
+ plugins: {
+ start: { security },
+ },
+ },
+ } = useKibana();
const [user, setUser] = useState();
useEffect(() => {
const getCurrentUser = async () => {
try {
- const authenticatedUser = await service.getCurrentUser();
+ const authenticatedUser = await security.authc.getCurrentUser();
setUser(authenticatedUser);
} catch {
setUser(undefined);
}
};
getCurrentUser();
- }, [service]);
+ }, [security]);
return user;
}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_force_update.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_force_update.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_force_update.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_force_update.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_genai_connectors.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_genai_connectors.ts
new file mode 100644
index 000000000000..1b105513a232
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_genai_connectors.ts
@@ -0,0 +1,22 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { useKibana } from './use_kibana';
+
+export function useGenAIConnectors() {
+ const {
+ services: {
+ plugins: {
+ start: { observabilityAIAssistant },
+ },
+ },
+ } = useKibana();
+
+ return observabilityAIAssistant.useGenAIConnectors();
+}
+
+export type UseGenAIConnectorsResult = ReturnType;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_json_editor_model.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_json_editor_model.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_json_editor_model.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_json_editor_model.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_kibana.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_kibana.ts
new file mode 100644
index 000000000000..2366fb5275c9
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_kibana.ts
@@ -0,0 +1,19 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { useKibana } from '@kbn/kibana-react-plugin/public';
+import type { CoreStart } from '@kbn/core/public';
+import type { ObservabilityAIAssistantAppPluginStartDependencies } from '../types';
+
+export type StartServices = CoreStart & {
+ plugins: { start: ObservabilityAIAssistantAppPluginStartDependencies };
+} & TAdditionalServices & {};
+
+const useTypedKibana = () =>
+ useKibana>();
+
+export { useTypedKibana as useKibana };
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_knowledge_base.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_knowledge_base.tsx
similarity index 89%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_knowledge_base.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_knowledge_base.tsx
index 026de6b9ea1c..0df3ab16c421 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_knowledge_base.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_knowledge_base.tsx
@@ -10,9 +10,12 @@ import type {
MlDeploymentState,
} from '@elastic/elasticsearch/lib/api/types';
import { useMemo, useState } from 'react';
-import { AbortableAsyncState, useAbortableAsync } from './use_abortable_async';
+import {
+ type AbortableAsyncState,
+ useAbortableAsync,
+} from '@kbn/observability-ai-assistant-plugin/public';
import { useKibana } from './use_kibana';
-import { useObservabilityAIAssistant } from './use_observability_ai_assistant';
+import { useObservabilityAIAssistantAppService } from './use_observability_ai_assistant_app_service';
export interface UseKnowledgeBaseResult {
status: AbortableAsyncState<{
@@ -34,7 +37,7 @@ export function useKnowledgeBase(): UseKnowledgeBaseResult {
start: { ml },
},
} = useKibana().services;
- const service = useObservabilityAIAssistant();
+ const service = useObservabilityAIAssistantAppService();
const status = useAbortableAsync(({ signal }) => {
return service.callApi('GET /internal/observability_ai_assistant/kb/status', {
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license.ts
similarity index 74%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license.ts
index c28e7da13256..58f074a4e71c 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license.ts
@@ -5,11 +5,10 @@
* 2.0.
*/
+import type { ILicense, LicenseType } from '@kbn/licensing-plugin/public';
import { useCallback } from 'react';
-import { Observable } from 'rxjs';
import useObservable from 'react-use/lib/useObservable';
-import type { ILicense, LicenseType } from '@kbn/licensing-plugin/public';
-import { useObservabilityAIAssistant } from './use_observability_ai_assistant';
+import { useKibana } from './use_kibana';
interface UseLicenseReturnValue {
getLicense: () => ILicense | null;
@@ -17,12 +16,18 @@ interface UseLicenseReturnValue {
}
export const useLicense = (): UseLicenseReturnValue => {
- const service = useObservabilityAIAssistant();
+ const {
+ services: {
+ plugins: {
+ start: { licensing },
+ },
+ },
+ } = useKibana();
- const license = useObservable(service.getLicense() ?? new Observable(), null);
+ const license = useObservable(licensing.license$);
return {
- getLicense: () => license,
+ getLicense: () => license ?? null,
hasAtLeast: useCallback(
(level: LicenseType) => {
if (!license) return;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license_management_locator.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license_management_locator.ts
similarity index 66%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license_management_locator.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license_management_locator.ts
index fe6c636e5286..1d5dd0420335 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license_management_locator.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license_management_locator.ts
@@ -5,16 +5,20 @@
* 2.0.
*/
-import { useObservabilityAIAssistant } from './use_observability_ai_assistant';
+import { useKibana } from './use_kibana';
const LICENSE_MANAGEMENT_LOCATOR = 'LICENSE_MANAGEMENT_LOCATOR';
export const useLicenseManagementLocator = () => {
- const service = useObservabilityAIAssistant();
+ const {
+ services: {
+ plugins: {
+ start: { share },
+ },
+ },
+ } = useKibana();
- const locators = service.getLicenseManagementLocator();
-
- const locator = locators.url.locators.get(LICENSE_MANAGEMENT_LOCATOR);
+ const locator = share.url.locators.get(LICENSE_MANAGEMENT_LOCATOR);
// license management does not exist on serverless
if (!locator) return;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_app_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_app_service.ts
new file mode 100644
index 000000000000..9c86f29565f4
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_app_service.ts
@@ -0,0 +1,20 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import { useContext } from 'react';
+import { ObservabilityAIAssistantAppServiceContext } from '../context/observability_ai_assistant_app_service_provider';
+
+export function useObservabilityAIAssistantAppService() {
+ const services = useContext(ObservabilityAIAssistantAppServiceContext);
+
+ if (!services) {
+ throw new Error(
+ 'ObservabilityAIAssistantContext not set. Did you wrap your component in ``?'
+ );
+ }
+
+ return services;
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_chat_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_chat_service.ts
new file mode 100644
index 000000000000..b03fbe942f3e
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_chat_service.ts
@@ -0,0 +1,19 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import { useKibana } from './use_kibana';
+
+export function useObservabilityAIAssistantChatService() {
+ const {
+ services: {
+ plugins: {
+ start: { observabilityAIAssistant },
+ },
+ },
+ } = useKibana();
+
+ return observabilityAIAssistant.useObservabilityAIAssistantChatService();
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_params.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_params.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_params.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_params.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_router.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_router.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_router.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_router.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_once.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_once.ts
new file mode 100644
index 000000000000..00dab01456af
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_once.ts
@@ -0,0 +1,21 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { useRef } from 'react';
+
+export function useOnce(variable: T): T {
+ const ref = useRef(variable);
+
+ if (ref.current !== variable) {
+ // eslint-disable-next-line no-console
+ console.trace(
+ `Variable changed from ${ref.current} to ${variable}, but only the initial value will be taken into account`
+ );
+ }
+
+ return ref.current;
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_theme.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_theme.ts
new file mode 100644
index 000000000000..d0b4ce61edef
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_theme.ts
@@ -0,0 +1,12 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { useEuiTheme } from '@elastic/eui';
+
+export function useTheme() {
+ return useEuiTheme().euiTheme;
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/i18n.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/i18n.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/i18n.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/i18n.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/index.ts
new file mode 100644
index 000000000000..5de1c30de7c4
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/index.ts
@@ -0,0 +1,23 @@
+/*
+ * 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 { PluginInitializer, PluginInitializerContext } from '@kbn/core/public';
+import { ConfigSchema, ObservabilityAIAssistantAppPlugin } from './plugin';
+import type {
+ ObservabilityAIAssistantAppPluginSetupDependencies,
+ ObservabilityAIAssistantAppPluginStartDependencies,
+ ObservabilityAIAssistantAppPublicSetup,
+ ObservabilityAIAssistantAppPublicStart,
+} from './types';
+
+export const plugin: PluginInitializer<
+ ObservabilityAIAssistantAppPublicSetup,
+ ObservabilityAIAssistantAppPublicStart,
+ ObservabilityAIAssistantAppPluginSetupDependencies,
+ ObservabilityAIAssistantAppPluginStartDependencies
+> = (pluginInitializerContext: PluginInitializerContext) =>
+ new ObservabilityAIAssistantAppPlugin(pluginInitializerContext);
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/plugin.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/plugin.tsx
new file mode 100644
index 000000000000..bfc1f288ffcb
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/plugin.tsx
@@ -0,0 +1,134 @@
+/*
+ * 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 ReactDOM from 'react-dom';
+import {
+ type AppMountParameters,
+ DEFAULT_APP_CATEGORIES,
+ type CoreSetup,
+ type CoreStart,
+ type Plugin,
+ type PluginInitializerContext,
+} from '@kbn/core/public';
+import type { Logger } from '@kbn/logging';
+import { i18n } from '@kbn/i18n';
+import type {
+ ObservabilityAIAssistantAppPluginSetupDependencies,
+ ObservabilityAIAssistantAppPluginStartDependencies,
+ ObservabilityAIAssistantAppPublicSetup,
+ ObservabilityAIAssistantAppPublicStart,
+} from './types';
+import { createAppService, ObservabilityAIAssistantAppService } from './service/create_app_service';
+import { SharedProviders } from './utils/shared_providers';
+import { LazyNavControl } from './components/nav_control/lazy_nav_control';
+
+// eslint-disable-next-line @typescript-eslint/no-empty-interface
+export interface ConfigSchema {}
+
+export class ObservabilityAIAssistantAppPlugin
+ implements
+ Plugin<
+ ObservabilityAIAssistantAppPublicSetup,
+ ObservabilityAIAssistantAppPublicStart,
+ ObservabilityAIAssistantAppPluginSetupDependencies,
+ ObservabilityAIAssistantAppPluginStartDependencies
+ >
+{
+ logger: Logger;
+ appService: ObservabilityAIAssistantAppService | undefined;
+
+ constructor(context: PluginInitializerContext) {
+ this.logger = context.logger.get();
+ }
+ setup(
+ coreSetup: CoreSetup,
+ pluginsSetup: ObservabilityAIAssistantAppPluginSetupDependencies
+ ): ObservabilityAIAssistantAppPublicSetup {
+ coreSetup.application.register({
+ id: 'observabilityAIAssistant',
+ title: i18n.translate('xpack.observabilityAiAssistant.appTitle', {
+ defaultMessage: 'Observability AI Assistant',
+ }),
+ euiIconType: 'logoObservability',
+ appRoute: '/app/observabilityAIAssistant',
+ category: DEFAULT_APP_CATEGORIES.observability,
+ visibleIn: [],
+ deepLinks: [
+ {
+ id: 'conversations',
+ title: i18n.translate('xpack.observabilityAiAssistant.conversationsDeepLinkTitle', {
+ defaultMessage: 'Conversations',
+ }),
+ path: '/conversations/new',
+ },
+ ],
+ mount: async (appMountParameters: AppMountParameters) => {
+ // Load application bundle and Get start services
+ const [{ Application }, [coreStart, pluginsStart]] = await Promise.all([
+ import('./application'),
+ coreSetup.getStartServices() as Promise<
+ [CoreStart, ObservabilityAIAssistantAppPluginStartDependencies, unknown]
+ >,
+ ]);
+
+ ReactDOM.render(
+ ,
+ appMountParameters.element
+ );
+
+ return () => {
+ ReactDOM.unmountComponentAtNode(appMountParameters.element);
+ };
+ },
+ });
+
+ return {};
+ }
+
+ start(
+ coreStart: CoreStart,
+ pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies
+ ): ObservabilityAIAssistantAppPublicStart {
+ const appService = (this.appService = createAppService({
+ pluginsStart,
+ }));
+
+ coreStart.chrome.navControls.registerRight({
+ mount: (element) => {
+ ReactDOM.render(
+
+
+ ,
+ element,
+ () => {}
+ );
+
+ return () => {};
+ },
+ // right before the user profile
+ order: 1001,
+ });
+
+ pluginsStart.observabilityAIAssistant.service.register(async ({ registerRenderFunction }) => {
+ const { registerFunctions } = await import('./functions');
+
+ await registerFunctions({ pluginsStart, registerRenderFunction });
+ });
+
+ return {};
+ }
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/routes/config.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/routes/config.tsx
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/routes/config.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/routes/config.tsx
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/routes/conversations/conversation_view.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/routes/conversations/conversation_view.tsx
similarity index 89%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/routes/conversations/conversation_view.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/routes/conversations/conversation_view.tsx
index 7c70672f1b54..3ac7df9f0fcd 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/routes/conversations/conversation_view.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/routes/conversations/conversation_view.tsx
@@ -9,19 +9,19 @@ import { css } from '@emotion/css';
import { euiThemeVars } from '@kbn/ui-theme';
import React, { useEffect, useState } from 'react';
import ReactDOM from 'react-dom';
+import { useAbortableAsync } from '@kbn/observability-ai-assistant-plugin/public';
import { ChatBody } from '../../components/chat/chat_body';
import { ChatInlineEditingContent } from '../../components/chat/chat_inline_edit';
import { ConversationList } from '../../components/chat/conversation_list';
-import { ObservabilityAIAssistantChatServiceProvider } from '../../context/observability_ai_assistant_chat_service_provider';
-import { useAbortableAsync } from '../../hooks/use_abortable_async';
-import { useConversationKey } from '../../hooks/use_conversation_key';
-import { useConversationList } from '../../hooks/use_conversation_list';
import { useCurrentUser } from '../../hooks/use_current_user';
import { useGenAIConnectors } from '../../hooks/use_genai_connectors';
import { useKnowledgeBase } from '../../hooks/use_knowledge_base';
-import { useObservabilityAIAssistant } from '../../hooks/use_observability_ai_assistant';
import { useObservabilityAIAssistantParams } from '../../hooks/use_observability_ai_assistant_params';
import { useObservabilityAIAssistantRouter } from '../../hooks/use_observability_ai_assistant_router';
+import { useObservabilityAIAssistantAppService } from '../../hooks/use_observability_ai_assistant_app_service';
+import { useKibana } from '../../hooks/use_kibana';
+import { useConversationKey } from '../../hooks/use_conversation_key';
+import { useConversationList } from '../../hooks/use_conversation_list';
const SECOND_SLOT_CONTAINER_WIDTH = 400;
@@ -30,7 +30,7 @@ export function ConversationView() {
const currentUser = useCurrentUser();
- const service = useObservabilityAIAssistant();
+ const service = useObservabilityAIAssistantAppService();
const connectors = useGenAIConnectors();
@@ -40,6 +40,16 @@ export function ConversationView() {
const { path } = useObservabilityAIAssistantParams('/conversations/*');
+ const {
+ services: {
+ plugins: {
+ start: {
+ observabilityAIAssistant: { ObservabilityAIAssistantChatServiceContext },
+ },
+ },
+ },
+ } = useKibana();
+
const chatService = useAbortableAsync(
({ signal }) => {
return service.start({ signal });
@@ -152,7 +162,7 @@ export function ConversationView() {
) : null}
{chatService.value && (
-
+
@@ -171,7 +180,7 @@ export function ConversationView() {
style={{ width: '100%' }}
/>
-
+
)}
);
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/service/create_app_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/service/create_app_service.ts
new file mode 100644
index 000000000000..dfb9b703bc4e
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/service/create_app_service.ts
@@ -0,0 +1,21 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import type { ObservabilityAIAssistantService } from '@kbn/observability-ai-assistant-plugin/public';
+import type { ObservabilityAIAssistantAppPluginStartDependencies } from '../types';
+
+export type ObservabilityAIAssistantAppService = ObservabilityAIAssistantService;
+
+export function createAppService({
+ pluginsStart,
+}: {
+ pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies;
+}): ObservabilityAIAssistantAppService {
+ return {
+ ...pluginsStart.observabilityAIAssistant.service,
+ };
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/types.ts
new file mode 100644
index 000000000000..5bce062b9eec
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/types.ts
@@ -0,0 +1,60 @@
+/*
+ * 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 { LensPublicSetup, LensPublicStart } from '@kbn/lens-plugin/public';
+import type {
+ DataViewsPublicPluginSetup,
+ DataViewsPublicPluginStart,
+} from '@kbn/data-views-plugin/public';
+import type { UiActionsSetup, UiActionsStart } from '@kbn/ui-actions-plugin/public';
+import type {
+ ObservabilityAIAssistantPublicSetup,
+ ObservabilityAIAssistantPublicStart,
+} from '@kbn/observability-ai-assistant-plugin/public';
+import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public';
+import type { SecurityPluginStart, SecurityPluginSetup } from '@kbn/security-plugin/public';
+import type { LicensingPluginSetup, LicensingPluginStart } from '@kbn/licensing-plugin/public';
+import type {
+ ObservabilitySharedPluginSetup,
+ ObservabilitySharedPluginStart,
+} from '@kbn/observability-shared-plugin/public';
+import type { MlPluginSetup, MlPluginStart } from '@kbn/ml-plugin/public';
+import type {
+ TriggersAndActionsUIPublicPluginSetup,
+ TriggersAndActionsUIPublicPluginStart,
+} from '@kbn/triggers-actions-ui-plugin/public';
+
+// eslint-disable-next-line @typescript-eslint/no-empty-interface
+export interface ObservabilityAIAssistantAppPublicStart {}
+// eslint-disable-next-line @typescript-eslint/no-empty-interface
+export interface ObservabilityAIAssistantAppPublicSetup {}
+
+export interface ObservabilityAIAssistantAppPluginStartDependencies {
+ licensing: LicensingPluginStart;
+ share: SharePluginStart;
+ security: SecurityPluginStart;
+ lens: LensPublicStart;
+ dataViews: DataViewsPublicPluginStart;
+ uiActions: UiActionsStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
+ observabilityShared: ObservabilitySharedPluginStart;
+ ml: MlPluginStart;
+ triggersActionsUi: TriggersAndActionsUIPublicPluginStart;
+}
+
+export interface ObservabilityAIAssistantAppPluginSetupDependencies {
+ licensing: LicensingPluginSetup;
+ share: SharePluginSetup;
+ security: SecurityPluginSetup;
+ lens: LensPublicSetup;
+ dataViews: DataViewsPublicPluginSetup;
+ uiActions: UiActionsSetup;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
+ observabilityShared: ObservabilitySharedPluginSetup;
+ ml: MlPluginSetup;
+ triggersActionsUi: TriggersAndActionsUIPublicPluginSetup;
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/builders.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/builders.ts
new file mode 100644
index 000000000000..57bdf17bd9a7
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/builders.ts
@@ -0,0 +1,124 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { merge, uniqueId } from 'lodash';
+import type { DeepPartial } from 'utility-types';
+import {
+ type Conversation,
+ type Message,
+ MessageRole,
+} from '@kbn/observability-ai-assistant-plugin/common';
+import { getAssistantSystemMessage } from '@kbn/observability-ai-assistant-plugin/public';
+
+type BuildMessageProps = DeepPartial & {
+ message: {
+ role: MessageRole;
+ function_call?: {
+ name: string;
+ trigger: MessageRole.Assistant | MessageRole.User | MessageRole.Elastic;
+ };
+ };
+};
+
+export function buildMessage(params: BuildMessageProps): Message {
+ return merge(
+ {
+ '@timestamp': new Date().toISOString(),
+ },
+ params
+ );
+}
+
+export function buildSystemMessage(
+ params?: Omit & {
+ message: DeepPartial>;
+ }
+) {
+ return buildMessage(
+ merge({}, params, {
+ message: { role: MessageRole.System },
+ })
+ );
+}
+
+export function buildUserMessage(
+ params?: Omit & {
+ message?: DeepPartial>;
+ }
+) {
+ return buildMessage(
+ merge(
+ {
+ message: {
+ content: "What's a function?",
+ },
+ },
+ params,
+ {
+ message: { role: MessageRole.User },
+ }
+ )
+ );
+}
+
+export function buildAssistantMessage(
+ params?: Omit & {
+ message: DeepPartial>;
+ }
+) {
+ return buildMessage(
+ merge(
+ {
+ message: {
+ content: `In computer programming and mathematics, a function is a fundamental concept that represents a relationship between input values and output values. It takes one or more input values (also known as arguments or parameters) and processes them to produce a result, which is the output of the function. The input values are passed to the function, and the function performs a specific set of operations or calculations on those inputs to produce the desired output.
+ A function is often defined with a name, which serves as an identifier to call and use the function in the code. It can be thought of as a reusable block of code that can be executed whenever needed, and it helps in organizing code and making it more modular and maintainable.`,
+ },
+ },
+ params,
+ {
+ message: { role: MessageRole.Assistant },
+ }
+ )
+ );
+}
+
+export function buildFunctionResponseMessage(
+ params?: Omit & {
+ message: DeepPartial>;
+ }
+) {
+ return buildUserMessage(
+ merge(
+ {},
+ {
+ message: {
+ name: 'leftpad',
+ },
+ ...params,
+ }
+ )
+ );
+}
+
+export function buildConversation(params?: Partial) {
+ return {
+ '@timestamp': '',
+ user: {
+ name: 'foo',
+ },
+ conversation: {
+ id: uniqueId(),
+ title: '',
+ last_updated: '',
+ },
+ messages: [getAssistantSystemMessage({ contexts: [] })],
+ labels: {},
+ numeric_labels: {},
+ namespace: '',
+ ...params,
+ };
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_initialized_object.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.test.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_initialized_object.test.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.test.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_initialized_object.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.ts
similarity index 92%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_initialized_object.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.ts
index 6ae23042a63e..ecd3554e4923 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_initialized_object.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { FunctionDefinition } from '../../common/types';
+import type { FunctionDefinition } from '@kbn/observability-ai-assistant-plugin/common';
type Params = FunctionDefinition['parameters'];
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_mock_chat_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_mock_chat_service.ts
new file mode 100644
index 000000000000..07fde4462abb
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_mock_chat_service.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.
+ */
+
+import type { DeeplyMockedKeys } from '@kbn/utility-types-jest';
+import type { ObservabilityAIAssistantChatService } from '@kbn/observability-ai-assistant-plugin/public';
+
+type MockedChatService = DeeplyMockedKeys;
+
+export const createMockChatService = (): MockedChatService => {
+ const mockChatService: MockedChatService = {
+ chat: jest.fn(),
+ complete: jest.fn(),
+ sendAnalyticsEvent: jest.fn(),
+ getContexts: jest.fn().mockReturnValue([{ name: 'core', description: '' }]),
+ getFunctions: jest.fn().mockReturnValue([]),
+ hasFunction: jest.fn().mockReturnValue(false),
+ hasRenderFunction: jest.fn().mockReturnValue(true),
+ renderFunction: jest.fn(),
+ };
+ return mockChatService;
+};
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_role_translation.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_role_translation.ts
similarity index 91%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_role_translation.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_role_translation.ts
index 390c0cfd0321..f74c9f842e40 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_role_translation.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_role_translation.ts
@@ -6,7 +6,7 @@
*/
import { i18n } from '@kbn/i18n';
-import { MessageRole } from '../../common';
+import { MessageRole } from '@kbn/observability-ai-assistant-plugin/public';
export function getRoleTranslation(role: MessageRole) {
if (role === MessageRole.User) {
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_settings_href.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_settings_href.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_settings_href.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_settings_href.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_settings_kb_href.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_settings_kb_href.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_settings_kb_href.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_settings_kb_href.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.test.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.test.tsx
similarity index 89%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.test.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.test.tsx
index 4bc2d2812333..e73555540b1e 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.test.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.test.tsx
@@ -7,17 +7,36 @@
import React from 'react';
import { last, pick } from 'lodash';
import { render } from '@testing-library/react';
-import { Message, MessageRole } from '../../common';
-import { createMockChatService } from '../service/create_mock_chat_service';
import { getTimelineItemsfromConversation } from './get_timeline_items_from_conversation';
import { __IntlProvider as IntlProvider } from '@kbn/i18n-react';
-import { ObservabilityAIAssistantChatServiceProvider } from '../context/observability_ai_assistant_chat_service_provider';
-import { ChatState } from '../hooks/use_chat';
+import { ChatState, Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public';
+import { createMockChatService } from './create_mock_chat_service';
+import { KibanaContextProvider } from '@kbn/triggers-actions-ui-plugin/public/common/lib/kibana';
const mockChatService = createMockChatService();
let items: ReturnType;
+function Providers({ children }: { children: React.ReactElement }) {
+ return (
+
+ mockChatService,
+ },
+ },
+ },
+ }}
+ >
+ {children}
+
+
+ );
+}
+
describe('getTimelineItemsFromConversation', () => {
describe('returns an opening message only', () => {
items = getTimelineItemsfromConversation({
@@ -151,11 +170,7 @@ describe('getTimelineItemsFromConversation', () => {
});
const { container } = render(items[2].title as React.ReactElement, {
- wrapper: ({ children }) => (
-
- {children}
-
- ),
+ wrapper: ({ children }) => {children},
});
expect(container.textContent).toBe('requested the function context');
@@ -177,11 +192,7 @@ describe('getTimelineItemsFromConversation', () => {
});
const { container } = render(items[3].title as React.ReactElement, {
- wrapper: ({ children }) => (
-
- {children}
-
- ),
+ wrapper: ({ children }) => {children},
});
expect(container.textContent).toBe('executed the function context');
@@ -253,13 +264,7 @@ describe('getTimelineItemsFromConversation', () => {
expect(items[3].element).toBeTruthy();
const { container } = render(items[3].element as React.ReactElement, {
- wrapper: ({ children }) => (
-
-
- {children}
-
-
- ),
+ wrapper: ({ children }) => {children},
});
expect(mockChatService.renderFunction).toHaveBeenCalledWith(
@@ -405,42 +410,6 @@ describe('getTimelineItemsFromConversation', () => {
});
});
- describe('when starting from a contextual insight', () => {
- beforeEach(() => {
- items = getTimelineItemsfromConversation({
- chatService: mockChatService,
- hasConnector: true,
- currentUser: {
- username: 'johndoe',
- full_name: 'John Doe',
- },
- chatState: ChatState.Ready,
- startedFrom: 'contextualInsight',
- messages: [
- {
- '@timestamp': new Date().toISOString(),
- message: {
- role: MessageRole.System,
- content: 'System',
- },
- },
- {
- '@timestamp': new Date().toISOString(),
- message: {
- role: MessageRole.User,
- content: 'Test',
- },
- },
- ],
- onActionClick: jest.fn(),
- });
- });
-
- it('hides the first user message', () => {
- expect(items[1].display.collapsed).toBe(true);
- });
- });
-
describe('with function calling suggested by the user', () => {
beforeEach(() => {
mockChatService.hasRenderFunction.mockImplementation(() => false);
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.tsx
similarity index 93%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.tsx
index 2268e6ed31fa..9a3fed770b94 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.tsx
@@ -11,13 +11,16 @@ import { useEuiTheme } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n-react';
import type { AuthenticatedUser } from '@kbn/security-plugin/common';
-import { Message, MessageRole } from '../../common';
+import type { Message } from '@kbn/observability-ai-assistant-plugin/common';
+import { MessageRole } from '@kbn/observability-ai-assistant-plugin/public';
+import {
+ ChatState,
+ ObservabilityAIAssistantChatService,
+} from '@kbn/observability-ai-assistant-plugin/public';
+import type { ChatActionClickPayload } from '@kbn/observability-ai-assistant-plugin/public';
import type { ChatTimelineItem } from '../components/chat/chat_timeline';
import { RenderFunction } from '../components/render_function';
-import type { ObservabilityAIAssistantChatService } from '../types';
-import { ChatState } from '../hooks/use_chat';
import { safeJsonParse } from './safe_json_parse';
-import type { ChatActionClickPayload } from '../components/chat/types';
function convertMessageToMarkdownCodeBlock(message: Message['message']) {
let value: object;
@@ -56,14 +59,11 @@ function FunctionName({ name: functionName }: { name: string }) {
return {functionName};
}
-export type StartedFrom = 'contextualInsight' | 'appTopNavbar' | 'conversationView';
-
export function getTimelineItemsfromConversation({
chatService,
currentUser,
hasConnector,
messages,
- startedFrom,
chatState,
onActionClick,
}: {
@@ -71,7 +71,6 @@ export function getTimelineItemsfromConversation({
currentUser?: Pick;
hasConnector: boolean;
messages: Message[];
- startedFrom?: StartedFrom;
chatState: ChatState;
onActionClick: ({
message,
@@ -209,14 +208,6 @@ export function getTimelineItemsfromConversation({
actions.canEdit = hasConnector;
display.collapsed = false;
-
- if (startedFrom === 'contextualInsight') {
- const firstUserMessageIndex = messagesWithoutSystem.findIndex(
- (el) => el.message.role === MessageRole.User
- );
-
- display.collapsed = index === firstUserMessageIndex;
- }
}
break;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/safe_json_parse.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/safe_json_parse.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/safe_json_parse.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/safe_json_parse.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/application.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/shared_providers.tsx
similarity index 60%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/application.tsx
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/shared_providers.tsx
index 10e5403bba43..eaa441b34a00 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/application.tsx
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/shared_providers.tsx
@@ -4,35 +4,28 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import React, { useMemo } from 'react';
-import type { History } from 'history';
-import type { Observable } from 'rxjs';
import { EuiErrorBoundary } from '@elastic/eui';
import type { CoreStart, CoreTheme } from '@kbn/core/public';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
-import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app';
-import { RouteRenderer, RouterProvider } from '@kbn/typed-react-router-config';
import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme';
-import { ObservabilityAIAssistantProvider } from './context/observability_ai_assistant_provider';
-import { observabilityAIAssistantRouter } from './routes/config';
-import type {
- ObservabilityAIAssistantPluginStartDependencies,
- ObservabilityAIAssistantService,
-} from './types';
-
-// This is the Conversation application.
+import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app';
+import React, { useMemo } from 'react';
+import type { Observable } from 'rxjs';
+import { ObservabilityAIAssistantAppServiceProvider } from '../context/observability_ai_assistant_app_service_provider';
+import type { ObservabilityAIAssistantAppService } from '../service/create_app_service';
+import type { ObservabilityAIAssistantAppPluginStartDependencies } from '../types';
-export function Application({
+export function SharedProviders({
+ children,
coreStart,
- history,
pluginsStart,
service,
theme$,
}: {
+ children: React.ReactElement;
coreStart: CoreStart;
- history: History;
- pluginsStart: ObservabilityAIAssistantPluginStartDependencies;
- service: ObservabilityAIAssistantService;
+ pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies;
+ service: ObservabilityAIAssistantAppService;
theme$: Observable;
}) {
const theme = useMemo(() => {
@@ -53,11 +46,9 @@ export function Application({
>
-
-
-
-
-
+
+ {children}
+
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/storybook_decorator.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/storybook_decorator.tsx
new file mode 100644
index 000000000000..9651baf0d909
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/storybook_decorator.tsx
@@ -0,0 +1,48 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
+import React, { ComponentType } from 'react';
+import {
+ createStorybookChatService,
+ createStorybookService,
+ type ObservabilityAIAssistantChatService,
+} from '@kbn/observability-ai-assistant-plugin/public';
+import { ObservabilityAIAssistantAppService } from '../service/create_app_service';
+import { ObservabilityAIAssistantAppServiceProvider } from '../context/observability_ai_assistant_app_service_provider';
+
+const mockService: ObservabilityAIAssistantAppService = {
+ ...createStorybookService(),
+};
+
+const mockChatService: ObservabilityAIAssistantChatService = createStorybookChatService();
+
+export function KibanaReactStorybookDecorator(Story: ComponentType) {
+ const ObservabilityAIAssistantChatServiceContext = React.createContext(mockChatService);
+ return (
+ {
+ if (setting === 'dateFormat') {
+ return 'MMM D, YYYY HH:mm';
+ }
+ },
+ },
+ observabilityAIAssistant: {
+ ObservabilityAIAssistantChatServiceContext,
+ },
+ }}
+ >
+
+
+
+
+
+
+ );
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/config.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/config.ts
new file mode 100644
index 000000000000..f1e9daaa5d12
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/config.ts
@@ -0,0 +1,14 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { schema, type TypeOf } from '@kbn/config-schema';
+
+export const config = schema.object({
+ enabled: schema.boolean({ defaultValue: true }),
+});
+
+export type ObservabilityAIAssistantAppConfig = TypeOf;
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/alerts.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/alerts.ts
similarity index 94%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/alerts.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/alerts.ts
index e58d75c52cf7..750e735c8560 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/alerts.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/alerts.ts
@@ -13,6 +13,7 @@ import {
ALERT_STATUS_ACTIVE,
} from '@kbn/rule-registry-plugin/common/technical_rule_data_field_names';
import { omit } from 'lodash';
+import { KibanaRequest } from '@kbn/core/server';
import { FunctionRegistrationParameters } from '.';
const OMITTED_ALERT_FIELDS = [
@@ -39,11 +40,11 @@ const DEFAULT_FEATURE_IDS = [
] as const;
export function registerAlertsFunction({
- client,
- registerFunction,
+ functions,
resources,
+ pluginsStart,
}: FunctionRegistrationParameters) {
- registerFunction(
+ functions.registerFunction(
{
name: 'alerts',
contexts: ['core'],
@@ -98,8 +99,9 @@ export function registerAlertsFunction({
},
signal
) => {
- const racContext = await resources.context.rac;
- const alertsClient = await racContext.getAlertsClient();
+ const alertsClient = await pluginsStart.ruleRegistry.getRacClientWithRequest(
+ resources.request as KibanaRequest
+ );
const start = datemath.parse(startAsDatemath)!.valueOf();
const end = datemath.parse(endAsDatemath)!.valueOf();
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/index.ts
new file mode 100644
index 000000000000..059dd00819d2
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/index.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.
+ */
+
+import type { RegistrationCallback } from '@kbn/observability-ai-assistant-plugin/server';
+import { registerAlertsFunction } from './alerts';
+import { registerQueryFunction } from './query';
+import { registerLensFunction } from './lens';
+import { registerVisualizeESQLFunction } from './visualize_esql';
+import { ObservabilityAIAssistantAppPluginStartDependencies } from '../types';
+
+export type FunctionRegistrationParameters = Omit<
+ Parameters[0],
+ 'registerContext' | 'hasFunction'
+> & { pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies };
+
+export const registerFunctions = async (registrationParameters: FunctionRegistrationParameters) => {
+ registerLensFunction(registrationParameters);
+ registerQueryFunction(registrationParameters);
+ registerVisualizeESQLFunction(registrationParameters);
+ registerAlertsFunction(registrationParameters);
+};
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/lens.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/lens.ts
similarity index 57%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/lens.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/lens.ts
index 62e0f98c1b65..dbae57c08c9e 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/lens.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/lens.ts
@@ -4,11 +4,11 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
+import type { ChatFunctionClient } from '@kbn/observability-ai-assistant-plugin/server/service/chat_function_client';
import { lensFunctionDefinition } from '../../common/functions/lens';
-import { RegisterFunction } from '../service/types';
-export function registerLensFunction({ registerFunction }: { registerFunction: RegisterFunction }) {
- registerFunction(lensFunctionDefinition, async () => {
+export function registerLensFunction({ functions }: { functions: ChatFunctionClient }) {
+ functions.registerFunction(lensFunctionDefinition, async () => {
return {
content: {},
};
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/correct_common_esql_mistakes.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/correct_common_esql_mistakes.test.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/correct_common_esql_mistakes.test.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/correct_common_esql_mistakes.test.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/correct_common_esql_mistakes.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/correct_common_esql_mistakes.ts
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/correct_common_esql_mistakes.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/correct_common_esql_mistakes.ts
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-abs.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-abs.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-abs.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-abs.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-acos.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-acos.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-acos.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-acos.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-asin.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-asin.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-asin.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-asin.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-atan.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-atan.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-atan.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-atan.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-atan2.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-atan2.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-atan2.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-atan2.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-auto_bucket.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-auto_bucket.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-auto_bucket.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-auto_bucket.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-avg.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-avg.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-avg.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-avg.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-case.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-case.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-case.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-case.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-ceil.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-ceil.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-ceil.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-ceil.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-coalesce.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-coalesce.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-coalesce.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-coalesce.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-concat.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-concat.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-concat.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-concat.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-cos.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-cos.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-cos.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-cos.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-cosh.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-cosh.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-cosh.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-cosh.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-count.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-count.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-count.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-count.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-count_distinct.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-count_distinct.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-count_distinct.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-count_distinct.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_extract.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_extract.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_extract.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_extract.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_format.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_format.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_format.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_format.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_parse.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_parse.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_parse.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_parse.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_trunc.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_trunc.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_trunc.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_trunc.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-dissect.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-dissect.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-dissect.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-dissect.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-drop.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-drop.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-drop.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-drop.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-e.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-e.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-e.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-e.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-enrich.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-enrich.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-enrich.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-enrich.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-eval.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-eval.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-eval.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-eval.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-floor.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-floor.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-floor.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-floor.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-from.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-from.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-from.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-from.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-greatest.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-greatest.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-greatest.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-greatest.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-grok.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-grok.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-grok.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-grok.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-keep.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-keep.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-keep.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-keep.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-least.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-least.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-least.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-least.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-left.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-left.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-left.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-left.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-length.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-length.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-length.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-length.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-limit.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-limit.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-limit.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-limit.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-limitations.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-limitations.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-limitations.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-limitations.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-log10.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-log10.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-log10.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-log10.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-ltrim.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-ltrim.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-ltrim.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-ltrim.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-max.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-max.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-max.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-max.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-median.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-median.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-median.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-median.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-median_absolute_deviation.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-median_absolute_deviation.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-median_absolute_deviation.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-median_absolute_deviation.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-min.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-min.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-min.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-min.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_avg.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_avg.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_avg.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_avg.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_concat.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_concat.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_concat.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_concat.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_count.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_count.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_count.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_count.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_dedupe.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_dedupe.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_dedupe.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_dedupe.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_expand.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_expand.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_expand.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_expand.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_max.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_max.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_max.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_max.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_median.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_median.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_median.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_median.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_min.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_min.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_min.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_min.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_sum.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_sum.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_sum.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_sum.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-now.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-now.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-now.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-now.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-operators.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-operators.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-operators.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-operators.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-overview.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-overview.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-overview.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-overview.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-percentile.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-percentile.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-percentile.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-percentile.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-pi.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-pi.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-pi.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-pi.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-pow.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-pow.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-pow.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-pow.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-processing-commands.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-processing-commands.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-processing-commands.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-processing-commands.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-rename.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-rename.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-rename.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-rename.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-replace.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-replace.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-replace.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-replace.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-right.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-right.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-right.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-right.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-round.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-round.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-round.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-round.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-row.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-row.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-row.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-row.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-rtrim.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-rtrim.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-rtrim.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-rtrim.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-show.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-show.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-show.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-show.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sin.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sin.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sin.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sin.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sinh.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sinh.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sinh.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sinh.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sort.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sort.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sort.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sort.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-source-commands.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-source-commands.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-source-commands.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-source-commands.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-split.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-split.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-split.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-split.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sqrt.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sqrt.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sqrt.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sqrt.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-stats.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-stats.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-stats.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-stats.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-substring.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-substring.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-substring.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-substring.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sum.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sum.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sum.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sum.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-syntax.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-syntax.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-syntax.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-syntax.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tan.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tan.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tan.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tan.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tanh.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tanh.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tanh.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tanh.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tau.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tau.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tau.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tau.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_boolean.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_boolean.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_boolean.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_boolean.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_cartesianpoint.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_cartesianpoint.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_cartesianpoint.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_cartesianpoint.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_datetime.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_datetime.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_datetime.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_datetime.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_degrees.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_degrees.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_degrees.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_degrees.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_double.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_double.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_double.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_double.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_geopoint.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_geopoint.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_geopoint.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_geopoint.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_integer.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_integer.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_integer.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_integer.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_ip.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_ip.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_ip.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_ip.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_long.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_long.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_long.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_long.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_radians.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_radians.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_radians.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_radians.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_string.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_string.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_string.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_string.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_unsigned_long.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_unsigned_long.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_unsigned_long.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_unsigned_long.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_version.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_version.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_version.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_version.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-trim.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-trim.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-trim.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-trim.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-where.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-where.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-where.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-where.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/index.ts
similarity index 95%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/index.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/index.ts
index 3245a15ff36c..ff36484381b2 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/index.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/index.ts
@@ -11,19 +11,19 @@ import pLimit from 'p-limit';
import Path from 'path';
import { lastValueFrom, startWith, type Observable } from 'rxjs';
import { promisify } from 'util';
-import type { FunctionRegistrationParameters } from '..';
-import type { ChatCompletionChunkEvent } from '../../../common/conversation_complete';
+import { FunctionVisibility, MessageRole } from '@kbn/observability-ai-assistant-plugin/common';
import {
VisualizeESQLUserIntention,
VISUALIZE_ESQL_USER_INTENTIONS,
-} from '../../../common/functions/visualize_esql';
-import { FunctionVisibility, MessageRole } from '../../../common/types';
+} from '@kbn/observability-ai-assistant-plugin/common/functions/visualize_esql';
import {
concatenateChatCompletionChunks,
- type ConcatenatedMessage,
-} from '../../../common/utils/concatenate_chat_completion_chunks';
-import { emitWithConcatenatedMessage } from '../../../common/utils/emit_with_concatenated_message';
-import { createFunctionResponseMessage } from '../../service/util/create_function_response_message';
+ ConcatenatedMessage,
+} from '@kbn/observability-ai-assistant-plugin/common/utils/concatenate_chat_completion_chunks';
+import { ChatCompletionChunkEvent } from '@kbn/observability-ai-assistant-plugin/common/conversation_complete';
+import { emitWithConcatenatedMessage } from '@kbn/observability-ai-assistant-plugin/common/utils/emit_with_concatenated_message';
+import { createFunctionResponseMessage } from '@kbn/observability-ai-assistant-plugin/server/service/util/create_function_response_message';
+import type { FunctionRegistrationParameters } from '..';
import { correctCommonEsqlMistakes } from './correct_common_esql_mistakes';
const readFile = promisify(Fs.readFile);
@@ -69,10 +69,10 @@ const loadEsqlDocs = once(async () => {
export function registerQueryFunction({
client,
- registerFunction,
+ functions,
resources,
}: FunctionRegistrationParameters) {
- registerFunction(
+ functions.registerFunction(
{
name: 'execute_query',
contexts: ['core'],
@@ -103,7 +103,7 @@ export function registerQueryFunction({
return { content: response };
}
);
- registerFunction(
+ functions.registerFunction(
{
name: 'query',
contexts: ['core'],
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/system_message.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/system_message.txt
similarity index 100%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/system_message.txt
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/system_message.txt
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/visualize_esql.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/visualize_esql.ts
similarity index 84%
rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/visualize_esql.ts
rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/visualize_esql.ts
index 3bf5beabbb02..be1e73a8039f 100644
--- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/visualize_esql.ts
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/visualize_esql.ts
@@ -6,18 +6,15 @@
*/
import { esFieldTypeToKibanaFieldType } from '@kbn/field-types';
import type { ESQLSearchReponse } from '@kbn/es-types';
-import {
- visualizeESQLFunction,
- VisualizeESQLUserIntention,
-} from '../../common/functions/visualize_esql';
-import type { FunctionRegistrationParameters } from '.';
+import { VisualizeESQLUserIntention } from '@kbn/observability-ai-assistant-plugin/common/functions/visualize_esql';
+import { visualizeESQLFunction } from '../../common/functions/visualize_esql';
+import { FunctionRegistrationParameters } from '.';
export function registerVisualizeESQLFunction({
- client,
- registerFunction,
+ functions,
resources,
}: FunctionRegistrationParameters) {
- registerFunction(
+ functions.registerFunction(
visualizeESQLFunction,
async ({ arguments: { query, intention }, connectorId, messages }, signal) => {
// With limit 0 I get only the columns, it is much more performant
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/index.ts
new file mode 100644
index 000000000000..36217f5a762e
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/index.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.
+ */
+
+import type { PluginConfigDescriptor, PluginInitializerContext } from '@kbn/core/server';
+import type { ObservabilityAIAssistantAppConfig } from './config';
+
+import { config as configSchema } from './config';
+export type {
+ ObservabilityAIAssistantAppServerStart,
+ ObservabilityAIAssistantAppServerSetup,
+} from './types';
+
+export const config: PluginConfigDescriptor = {
+ exposeToBrowser: {},
+ schema: configSchema,
+};
+
+export const plugin = async (ctx: PluginInitializerContext) => {
+ const { ObservabilityAIAssistantAppPlugin } = await import('./plugin');
+ return new ObservabilityAIAssistantAppPlugin(ctx);
+};
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/plugin.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/plugin.ts
new file mode 100644
index 000000000000..097c50bad0bd
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/plugin.ts
@@ -0,0 +1,60 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import {
+ type CoreSetup,
+ type Logger,
+ Plugin,
+ type PluginInitializerContext,
+ type CoreStart,
+} from '@kbn/core/server';
+import type { ObservabilityAIAssistantAppConfig } from './config';
+import { registerFunctions } from './functions';
+import type {
+ ObservabilityAIAssistantAppPluginSetupDependencies,
+ ObservabilityAIAssistantAppPluginStartDependencies,
+ ObservabilityAIAssistantAppServerSetup,
+ ObservabilityAIAssistantAppServerStart,
+} from './types';
+
+export class ObservabilityAIAssistantAppPlugin
+ implements
+ Plugin<
+ ObservabilityAIAssistantAppServerSetup,
+ ObservabilityAIAssistantAppServerStart,
+ ObservabilityAIAssistantAppPluginSetupDependencies,
+ ObservabilityAIAssistantAppPluginStartDependencies
+ >
+{
+ logger: Logger;
+
+ constructor(context: PluginInitializerContext) {
+ this.logger = context.logger.get();
+ }
+ public setup(
+ core: CoreSetup<
+ ObservabilityAIAssistantAppPluginStartDependencies,
+ ObservabilityAIAssistantAppServerStart
+ >,
+ plugins: ObservabilityAIAssistantAppPluginSetupDependencies
+ ): ObservabilityAIAssistantAppServerSetup {
+ return {};
+ }
+
+ public start(
+ core: CoreStart,
+ pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies
+ ): ObservabilityAIAssistantAppServerStart {
+ pluginsStart.observabilityAIAssistant.service.register((params) => {
+ return registerFunctions({
+ ...params,
+ pluginsStart,
+ });
+ });
+ return {};
+ }
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/types.ts
new file mode 100644
index 000000000000..996279329ab9
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/types.ts
@@ -0,0 +1,30 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import type {
+ ObservabilityAIAssistantServerSetup,
+ ObservabilityAIAssistantServerStart,
+} from '@kbn/observability-ai-assistant-plugin/server';
+import type {
+ RuleRegistryPluginSetupContract,
+ RuleRegistryPluginStartContract,
+} from '@kbn/rule-registry-plugin/server';
+
+// eslint-disable-next-line @typescript-eslint/no-empty-interface
+export interface ObservabilityAIAssistantAppServerStart {}
+// eslint-disable-next-line @typescript-eslint/no-empty-interface
+export interface ObservabilityAIAssistantAppServerSetup {}
+
+export interface ObservabilityAIAssistantAppPluginStartDependencies {
+ observabilityAIAssistant: ObservabilityAIAssistantServerStart;
+ ruleRegistry: RuleRegistryPluginStartContract;
+}
+
+export interface ObservabilityAIAssistantAppPluginSetupDependencies {
+ observabilityAIAssistant: ObservabilityAIAssistantServerSetup;
+ ruleRegistry: RuleRegistryPluginSetupContract;
+}
diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/tsconfig.json b/x-pack/plugins/observability_solution/observability_ai_assistant_app/tsconfig.json
new file mode 100644
index 000000000000..ac80f9b74f1c
--- /dev/null
+++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/tsconfig.json
@@ -0,0 +1,54 @@
+{
+ "extends": "../../../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "target/types"
+ },
+ "include": [
+ "../../../typings/**/*",
+ "common/**/*",
+ "public/**/*",
+ "scripts/**/*",
+ "typings/**/*",
+ "public/**/*.json",
+ "server/**/*"
+ ],
+ "kbn_references": [
+ "@kbn/core",
+ "@kbn/logging",
+ "@kbn/config-schema",
+ "@kbn/security-plugin",
+ "@kbn/i18n",
+ "@kbn/kibana-react-plugin",
+ "@kbn/observability-shared-plugin",
+ "@kbn/lens-embeddable-utils",
+ "@kbn/field-formats-plugin",
+ "@kbn/lens-plugin",
+ "@kbn/data-views-plugin",
+ "@kbn/es-query",
+ "@kbn/rule-registry-plugin",
+ "@kbn/licensing-plugin",
+ "@kbn/share-plugin",
+ "@kbn/ui-actions-plugin",
+ "@kbn/expressions-plugin",
+ "@kbn/visualization-utils",
+ "@kbn/field-types",
+ "@kbn/es-types",
+ "@kbn/esql-utils",
+ "@kbn/observability-ai-assistant-plugin",
+ "@kbn/typed-react-router-config",
+ "@kbn/ui-theme",
+ "@kbn/actions-plugin",
+ "@kbn/user-profile-components",
+ "@kbn/i18n-react",
+ "@kbn/triggers-actions-ui-plugin",
+ "@kbn/core-http-browser",
+ "@kbn/code-editor",
+ "@kbn/monaco",
+ "@kbn/utility-types-jest",
+ "@kbn/ml-plugin",
+ "@kbn/react-kibana-context-theme",
+ "@kbn/shared-ux-link-redirect-app",
+ "@kbn/shared-ux-utility"
+ ],
+ "exclude": ["target/**/*"]
+}
diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx b/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx
index 84c536b616c6..ff66bb0034c5 100644
--- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx
+++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx
@@ -38,7 +38,7 @@ export const LogsExplorerTopNavMenu = () => {
const ServerlessTopNav = () => {
const { services } = useKibanaContextForPlugin();
- const { ObservabilityAIAssistantActionMenuItem } = services.observabilityAIAssistant;
+
return (
@@ -75,11 +75,6 @@ const ServerlessTopNav = () => {
- {ObservabilityAIAssistantActionMenuItem ? (
-
-
-
- ) : null}
);
};
@@ -88,7 +83,6 @@ const StatefulTopNav = () => {
const {
services: {
appParams: { setHeaderActionMenu },
- observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
chrome,
i18n: i18nStart,
theme,
@@ -148,9 +142,6 @@ const StatefulTopNav = () => {
- {ObservabilityAIAssistantActionMenuItem ? (
-
- ) : null}
diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts
index 8d8a1f52619e..d73d4c372e2f 100644
--- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts
+++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts
@@ -14,7 +14,7 @@ import { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public';
import { AppMountParameters, ScopedHistory } from '@kbn/core/public';
import { LogsSharedClientStartExports } from '@kbn/logs-shared-plugin/public';
import { DatasetQualityPluginStart } from '@kbn/dataset-quality-plugin/public';
-import { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public';
+import { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public';
import { TriggersAndActionsUIPublicPluginStart } from '@kbn/triggers-actions-ui-plugin/public';
import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public';
import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public';
@@ -44,7 +44,7 @@ export interface ObservabilityLogsExplorerStartDeps {
discover: DiscoverStart;
logsExplorer: LogsExplorerPluginStart;
logsShared: LogsSharedClientStartExports;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
observabilityShared: ObservabilitySharedPluginStart;
observability: ObservabilityPublicStart;
serverless?: ServerlessPluginStart;
diff --git a/x-pack/plugins/observability_solution/profiling/kibana.jsonc b/x-pack/plugins/observability_solution/profiling/kibana.jsonc
index 5902c5f63f8f..e7dd013a27df 100644
--- a/x-pack/plugins/observability_solution/profiling/kibana.jsonc
+++ b/x-pack/plugins/observability_solution/profiling/kibana.jsonc
@@ -30,8 +30,7 @@
],
"requiredBundles": [
"kibanaReact",
- "kibanaUtils",
- "observabilityAIAssistant"
+ "kibanaUtils"
]
}
}
diff --git a/x-pack/plugins/observability_solution/profiling/public/app.tsx b/x-pack/plugins/observability_solution/profiling/public/app.tsx
index 8600d4db602f..f90c14ac7044 100644
--- a/x-pack/plugins/observability_solution/profiling/public/app.tsx
+++ b/x-pack/plugins/observability_solution/profiling/public/app.tsx
@@ -26,7 +26,6 @@ import { ProfilingHeaderActionMenu } from './components/profiling_header_action_
import { RouterErrorBoundary } from './routing/router_error_boundary';
import { LicenseProvider } from './components/contexts/license/license_context';
import { ProfilingSetupStatusContextProvider } from './components/contexts/profiling_setup_status/profiling_setup_status_context';
-import { useProfilingDependencies } from './components/contexts/profiling_dependencies/use_profiling_dependencies';
interface Props {
profilingFetchServices: Services;
@@ -48,23 +47,12 @@ function MountProfilingActionMenu({
theme$: AppMountParameters['theme$'];
setHeaderActionMenu: AppMountParameters['setHeaderActionMenu'];
}) {
- const {
- start: {
- observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
- },
- } = useProfilingDependencies();
-
return (
- {ObservabilityAIAssistantActionMenuItem ? (
-
-
-
- ) : null}
);
diff --git a/x-pack/plugins/observability_solution/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx b/x-pack/plugins/observability_solution/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx
index b82d8e2693a1..96410444dc44 100644
--- a/x-pack/plugins/observability_solution/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx
+++ b/x-pack/plugins/observability_solution/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx
@@ -7,7 +7,7 @@
import React, { useMemo } from 'react';
import { i18n } from '@kbn/i18n';
-import { Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public';
+import type { Message } from '@kbn/observability-ai-assistant-plugin/public';
import { Frame } from '.';
import { useProfilingDependencies } from '../contexts/profiling_dependencies/use_profiling_dependencies';
@@ -17,7 +17,10 @@ interface Props {
export function FrameInformationAIAssistant({ frame }: Props) {
const {
- observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight },
+ observabilityAIAssistant: {
+ ObservabilityAIAssistantContextualInsight,
+ getContextualInsightMessages,
+ },
} = useProfilingDependencies().start;
const promptMessages = useMemo(() => {
@@ -25,67 +28,57 @@ export function FrameInformationAIAssistant({ frame }: Props) {
const functionName = frame.functionName;
const library = frame.exeFileName;
- const now = new Date().toISOString();
-
- return [
- {
- '@timestamp': now,
- message: {
- role: MessageRole.User,
- content: `I am a software engineer. I am trying to understand what a function in a particular
- software library does.
-
- The library is: ${library}
- The function is: ${functionName}
-
- Your have two tasks. Your first task is to desribe what the library is and what its use cases are, and to
- describe what the function does. The output format should look as follows:
-
- Library description: Provide a concise description of the library
- Library use-cases: Provide a concise description of what the library is typically used for.
- Function description: Provide a concise, technical, description of what the function does.
-
- Assume the function ${functionName} from the library ${library} is consuming significant CPU resources.
- Your second task is to suggest ways to optimize or improve the system that involve the ${functionName} function from the
- ${library} library. Types of improvements that would be useful to me are improvements that result in:
-
- - Higher performance so that the system runs faster or uses less CPU
- - Better memory efficient so that the system uses less RAM
- - Better storage efficient so that the system stores less data on disk.
- - Better network I/O efficiency so that less data is sent over the network
- - Better disk I/O efficiency so that less data is read and written from disk
-
- Make up to five suggestions. Your suggestions must meet all of the following criteria:
- 1. Your suggestions should detailed, technical and include concrete examples.
- 2. Your suggestions should be specific to improving performance of a system in which the ${functionName} function from
- the ${library} library is consuming significant CPU.
- 3. If you suggest replacing the function or library with a more efficient replacement you must suggest at least
- one concrete replacement.
-
- If you know of fewer than five ways to improve the performance of a system in which the ${functionName} function from the
- ${library} library is consuming significant CPU, then provide fewer than five suggestions. If you do not know of any
- way in which to improve the performance then say "I do not know how to improve the performance of systems where
- this function is consuming a significant amount of CPU".
-
- Do not suggest using a CPU profiler. I have already profiled my code. The profiler I used is Elastic Universal Profiler.
- If there is specific information I should look for in the profiler output then tell me what information to look for
- in the output of Elastic Universal Profiler.
-
- You must not include URLs, web addresses or websites of any kind in your output.
-
- If you have suggestions, the output format should look as follows:
-
- Here are some suggestions as to how you might optimize your system if ${functionName} in ${library} is consuming
- significant CPU resources:
- 1. Insert first suggestion
- 2. Insert second suggestion`,
- },
- },
- ];
+ return getContextualInsightMessages({
+ message: `I am trying to understand what this function does. Can you help me?`,
+ instructions: `The library is: ${library}
+ The function is: ${functionName}
+
+ Your have two tasks. Your first task is to desribe what the library is and what its use cases are, and to
+ describe what the function does. The output format should look as follows:
+
+ Library description: Provide a concise description of the library
+ Library use-cases: Provide a concise description of what the library is typically used for.
+ Function description: Provide a concise, technical, description of what the function does.
+
+ Assume the function ${functionName} from the library ${library} is consuming significant CPU resources.
+ Your second task is to suggest ways to optimize or improve the system that involve the ${functionName} function from the
+ ${library} library. Types of improvements that would be useful to me are improvements that result in:
+
+ - Higher performance so that the system runs faster or uses less CPU
+ - Better memory efficient so that the system uses less RAM
+ - Better storage efficient so that the system stores less data on disk.
+ - Better network I/O efficiency so that less data is sent over the network
+ - Better disk I/O efficiency so that less data is read and written from disk
+
+ Make up to five suggestions. Your suggestions must meet all of the following criteria:
+ 1. Your suggestions should detailed, technical and include concrete examples.
+ 2. Your suggestions should be specific to improving performance of a system in which the ${functionName} function from
+ the ${library} library is consuming significant CPU.
+ 3. If you suggest replacing the function or library with a more efficient replacement you must suggest at least
+ one concrete replacement.
+
+ If you know of fewer than five ways to improve the performance of a system in which the ${functionName} function from the
+ ${library} library is consuming significant CPU, then provide fewer than five suggestions. If you do not know of any
+ way in which to improve the performance then say "I do not know how to improve the performance of systems where
+ this function is consuming a significant amount of CPU".
+
+ Do not suggest using a CPU profiler. I have already profiled my code. The profiler I used is Elastic Universal Profiler.
+ If there is specific information I should look for in the profiler output then tell me what information to look for
+ in the output of Elastic Universal Profiler.
+
+ You must not include URLs, web addresses or websites of any kind in your output.
+
+ If you have suggestions, the output format should look as follows:
+
+ Here are some suggestions as to how you might optimize your system if ${functionName} in ${library} is consuming
+ significant CPU resources:
+ 1. Insert first suggestion
+ 2. Insert second suggestion`,
+ });
}
return undefined;
- }, [frame?.functionName, frame?.exeFileName]);
+ }, [frame?.functionName, frame?.exeFileName, getContextualInsightMessages]);
return (
<>
diff --git a/x-pack/plugins/observability_solution/profiling/public/types.ts b/x-pack/plugins/observability_solution/profiling/public/types.ts
index cc949254e270..8041f28e4558 100644
--- a/x-pack/plugins/observability_solution/profiling/public/types.ts
+++ b/x-pack/plugins/observability_solution/profiling/public/types.ts
@@ -21,8 +21,8 @@ import { ChartsPluginSetup, ChartsPluginStart } from '@kbn/charts-plugin/public'
import { LicensingPluginSetup } from '@kbn/licensing-plugin/public';
import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public';
import {
- ObservabilityAIAssistantPluginSetup,
- ObservabilityAIAssistantPluginStart,
+ ObservabilityAIAssistantPublicSetup,
+ ObservabilityAIAssistantPublicStart,
} from '@kbn/observability-ai-assistant-plugin/public';
import { EmbeddableSetup } from '@kbn/embeddable-plugin/public';
import type {
@@ -33,7 +33,7 @@ import type {
export interface ProfilingPluginPublicSetupDeps {
observability: ObservabilityPublicSetup;
observabilityShared: ObservabilitySharedPluginSetup;
- observabilityAIAssistant: ObservabilityAIAssistantPluginSetup;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
dataViews: DataViewsPublicPluginSetup;
data: DataPublicPluginSetup;
charts: ChartsPluginSetup;
@@ -46,7 +46,7 @@ export interface ProfilingPluginPublicSetupDeps {
export interface ProfilingPluginPublicStartDeps {
observability: ObservabilityPublicStart;
observabilityShared: ObservabilitySharedPluginStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
dataViews: DataViewsPublicPluginStart;
data: DataPublicPluginStart;
charts: ChartsPluginStart;
diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu.tsx
index 4064c71fd3db..a9554c776153 100644
--- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu.tsx
+++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu.tsx
@@ -9,15 +9,9 @@ import React from 'react';
import { HeaderMenuPortal } from '@kbn/observability-shared-plugin/public';
import { AppMountParameters } from '@kbn/core/public';
import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
-import { useKibana } from '@kbn/kibana-react-plugin/public';
-import { ClientPluginsStart } from '../../../../../plugin';
import { ActionMenuContent } from './action_menu_content';
export const ActionMenu = ({ appMountParameters }: { appMountParameters: AppMountParameters }) => {
- const {
- observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
- } = useKibana().services;
-
return (
- {ObservabilityAIAssistantActionMenuItem && (
-
-
-
- )}
);
diff --git a/x-pack/plugins/observability_solution/synthetics/public/plugin.ts b/x-pack/plugins/observability_solution/synthetics/public/plugin.ts
index 74029366ffd0..d4758952e63f 100644
--- a/x-pack/plugins/observability_solution/synthetics/public/plugin.ts
+++ b/x-pack/plugins/observability_solution/synthetics/public/plugin.ts
@@ -51,8 +51,8 @@ import type {
ObservabilitySharedPluginStart,
} from '@kbn/observability-shared-plugin/public';
import {
- ObservabilityAIAssistantPluginStart,
- ObservabilityAIAssistantPluginSetup,
+ ObservabilityAIAssistantPublicSetup,
+ ObservabilityAIAssistantPublicStart,
} from '@kbn/observability-ai-assistant-plugin/public';
import { ServerlessPluginSetup, ServerlessPluginStart } from '@kbn/serverless/public';
import { PLUGIN } from '../common/constants/plugin';
@@ -67,7 +67,7 @@ export interface ClientPluginsSetup {
exploratoryView: ExploratoryViewPublicSetup;
observability: ObservabilityPublicSetup;
observabilityShared: ObservabilitySharedPluginSetup;
- observabilityAIAssistant: ObservabilityAIAssistantPluginSetup;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
share: SharePluginSetup;
triggersActionsUi: TriggersAndActionsUIPublicPluginSetup;
cloud?: CloudSetup;
@@ -84,7 +84,7 @@ export interface ClientPluginsStart {
exploratoryView: ExploratoryViewPublicStart;
observability: ObservabilityPublicStart;
observabilityShared: ObservabilitySharedPluginStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
share: SharePluginStart;
triggersActionsUi: TriggersAndActionsUIPublicPluginStart;
cases: CasesPublicStart;
diff --git a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx
index 41a18cebdb1c..c82ac50a7259 100644
--- a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx
+++ b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx
@@ -143,10 +143,7 @@ const Application = (props: UptimeAppProps) => {
-
+
diff --git a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/common/header/action_menu.tsx b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/common/header/action_menu.tsx
index 937cacaab165..b332b6c28b31 100644
--- a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/common/header/action_menu.tsx
+++ b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/common/header/action_menu.tsx
@@ -9,16 +9,9 @@ import React from 'react';
import { HeaderMenuPortal } from '@kbn/observability-shared-plugin/public';
import { AppMountParameters } from '@kbn/core/public';
import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
-import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public';
import { ActionMenuContent } from './action_menu_content';
-export const ActionMenu = ({
- appMountParameters,
- observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
-}: {
- appMountParameters: AppMountParameters;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
-}) => (
+export const ActionMenu = ({ appMountParameters }: { appMountParameters: AppMountParameters }) => (
-
- {ObservabilityAIAssistantActionMenuItem ? : null}
-
);
diff --git a/x-pack/plugins/observability_solution/uptime/public/plugin.ts b/x-pack/plugins/observability_solution/uptime/public/plugin.ts
index c628eadd2d24..1e891b808689 100644
--- a/x-pack/plugins/observability_solution/uptime/public/plugin.ts
+++ b/x-pack/plugins/observability_solution/uptime/public/plugin.ts
@@ -52,8 +52,8 @@ import type {
} from '@kbn/observability-shared-plugin/public';
import { AppStatus, AppUpdater } from '@kbn/core-application-browser';
import {
- ObservabilityAIAssistantPluginStart,
- ObservabilityAIAssistantPluginSetup,
+ ObservabilityAIAssistantPublicStart,
+ ObservabilityAIAssistantPublicSetup,
} from '@kbn/observability-ai-assistant-plugin/public';
import { PLUGIN } from '../common/constants/plugin';
import {
@@ -73,7 +73,7 @@ export interface ClientPluginsSetup {
exploratoryView: ExploratoryViewPublicSetup;
observability: ObservabilityPublicSetup;
observabilityShared: ObservabilitySharedPluginSetup;
- observabilityAIAssistant: ObservabilityAIAssistantPluginSetup;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
share: SharePluginSetup;
triggersActionsUi: TriggersAndActionsUIPublicPluginSetup;
cloud?: CloudSetup;
@@ -89,7 +89,7 @@ export interface ClientPluginsStart {
exploratoryView: ExploratoryViewPublicStart;
observability: ObservabilityPublicStart;
observabilityShared: ObservabilitySharedPluginStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
share: SharePluginStart;
triggersActionsUi: TriggersAndActionsUIPublicPluginStart;
cases: CasesPublicStart;
diff --git a/x-pack/plugins/observability_solution/ux/public/components/app/rum_dashboard/action_menu/index.tsx b/x-pack/plugins/observability_solution/ux/public/components/app/rum_dashboard/action_menu/index.tsx
index 83350afcf8ac..5199510ee12f 100644
--- a/x-pack/plugins/observability_solution/ux/public/components/app/rum_dashboard/action_menu/index.tsx
+++ b/x-pack/plugins/observability_solution/ux/public/components/app/rum_dashboard/action_menu/index.tsx
@@ -44,11 +44,7 @@ export function UXActionMenu({
appMountParameters: AppMountParameters;
isDev: boolean;
}) {
- const {
- http,
- application,
- observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
- } = useKibanaServices();
+ const { http, application } = useKibanaServices();
const { urlParams } = useLegacyUrlParams();
const { rangeTo, rangeFrom, serviceName } = urlParams;
@@ -102,11 +98,6 @@ export function UXActionMenu({
- {ObservabilityAIAssistantActionMenuItem ? (
-
-
-
- ) : null}
);
diff --git a/x-pack/plugins/observability_solution/ux/public/plugin.ts b/x-pack/plugins/observability_solution/ux/public/plugin.ts
index 63dedfacceef..ec1b0ef11c0d 100644
--- a/x-pack/plugins/observability_solution/ux/public/plugin.ts
+++ b/x-pack/plugins/observability_solution/ux/public/plugin.ts
@@ -44,8 +44,8 @@ import {
ObservabilitySharedPluginStart,
} from '@kbn/observability-shared-plugin/public';
import {
- ObservabilityAIAssistantPluginStart,
- ObservabilityAIAssistantPluginSetup,
+ ObservabilityAIAssistantPublicSetup,
+ ObservabilityAIAssistantPublicStart,
} from '@kbn/observability-ai-assistant-plugin/public';
export type UxPluginSetup = void;
@@ -59,7 +59,7 @@ export interface ApmPluginSetupDeps {
licensing: LicensingPluginSetup;
observability: ObservabilityPublicSetup;
observabilityShared: ObservabilitySharedPluginSetup;
- observabilityAIAssistant: ObservabilityAIAssistantPluginSetup;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
}
export interface ApmPluginStartDeps {
@@ -71,7 +71,7 @@ export interface ApmPluginStartDeps {
inspector: InspectorPluginStart;
observability: ObservabilityPublicStart;
observabilityShared: ObservabilitySharedPluginStart;
- observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
+ observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
exploratoryView: ExploratoryViewPublicStart;
dataViews: DataViewsPublicPluginStart;
lens: LensPublicStart;
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json
index 8fad7bdf8159..5217a68eea75 100644
--- a/x-pack/plugins/translations/translations/fr-FR.json
+++ b/x-pack/plugins/translations/translations/fr-FR.json
@@ -28911,7 +28911,6 @@
"xpack.observabilityAiAssistant.suggestedFunctionEvent": "a demandé la fonction {functionName}",
"xpack.observabilityAiAssistant.userExecutedFunctionEvent": "a exécuté la fonction {functionName}",
"xpack.observabilityAiAssistant.userSuggestedFunctionEvent": "a demandé la fonction {functionName}",
- "xpack.observabilityAiAssistant.actionMenuItemLabel": "Assistant d'intelligence artificielle",
"xpack.observabilityAiAssistant.appTitle": "Assistant d'intelligence artificielle d'Observability",
"xpack.observabilityAiAssistant.askAssistantButton.buttonLabel": "Demander à l'assistant",
"xpack.observabilityAiAssistant.askAssistantButton.popoverContent": "Obtenez des informations relatives à vos données grâce à l'assistant d'Elastic",
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index e60bde52a81d..7935f67ee2c6 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -28912,7 +28912,6 @@
"xpack.observabilityAiAssistant.suggestedFunctionEvent": "関数{functionName}を要求しました",
"xpack.observabilityAiAssistant.userExecutedFunctionEvent": "関数{functionName}を実行しました",
"xpack.observabilityAiAssistant.userSuggestedFunctionEvent": "関数{functionName}を要求しました",
- "xpack.observabilityAiAssistant.actionMenuItemLabel": "AI Assistant",
"xpack.observabilityAiAssistant.appTitle": "オブザーバビリティAI Assistant",
"xpack.observabilityAiAssistant.askAssistantButton.buttonLabel": "アシスタントに聞く",
"xpack.observabilityAiAssistant.askAssistantButton.popoverContent": "Elastic Assistantでデータに関するインサイトを得ましょう",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index a77723e37e7f..1ef6fd0c26a0 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -28896,7 +28896,6 @@
"xpack.observabilityAiAssistant.suggestedFunctionEvent": "已请求函数 {functionName}",
"xpack.observabilityAiAssistant.userExecutedFunctionEvent": "已执行函数 {functionName}",
"xpack.observabilityAiAssistant.userSuggestedFunctionEvent": "已请求函数 {functionName}",
- "xpack.observabilityAiAssistant.actionMenuItemLabel": "AI 助手",
"xpack.observabilityAiAssistant.appTitle": "Observability AI 助手",
"xpack.observabilityAiAssistant.askAssistantButton.buttonLabel": "询问助手",
"xpack.observabilityAiAssistant.askAssistantButton.popoverContent": "使用 Elastic 助手深入了解您的数据",
diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/create_openai_chunk.ts b/x-pack/test/observability_ai_assistant_api_integration/common/create_openai_chunk.ts
index cc83dac4aa1e..9462eae3fb54 100644
--- a/x-pack/test/observability_ai_assistant_api_integration/common/create_openai_chunk.ts
+++ b/x-pack/test/observability_ai_assistant_api_integration/common/create_openai_chunk.ts
@@ -5,8 +5,8 @@
* 2.0.
*/
-import type { CreateChatCompletionResponseChunk } from '@kbn/observability-ai-assistant-plugin/common/types';
import { v4 } from 'uuid';
+import { CreateChatCompletionResponseChunk } from '@kbn/observability-ai-assistant-plugin/common/utils/process_openai_stream';
export function createOpenAiChunk(
msg: string | { content?: string; function_call?: { name: string; arguments?: string } }
diff --git a/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts b/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts
index 396799686579..78dc47fcb6c2 100644
--- a/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts
+++ b/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts
@@ -6,7 +6,7 @@
*/
import type { PathsOf, TypeAsArgs, TypeOf } from '@kbn/typed-react-router-config';
-import type { ObservabilityAIAssistantRoutes } from '@kbn/observability-ai-assistant-plugin/public/routes/config';
+import type { ObservabilityAIAssistantRoutes } from '@kbn/observability-ai-assistant-app-plugin/public/routes/config';
import qs from 'query-string';
import type { Role } from '@kbn/security-plugin-types-common';
import { OBSERVABILITY_AI_ASSISTANT_FEATURE_ID } from '@kbn/observability-ai-assistant-plugin/common/feature';
diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json
index a906808fc5ae..71f6cf3db7c4 100644
--- a/x-pack/test/tsconfig.json
+++ b/x-pack/test/tsconfig.json
@@ -167,5 +167,6 @@
"@kbn/typed-react-router-config",
"@kbn/ftr-common-functional-ui-services",
"@kbn/infra-forge",
+ "@kbn/observability-ai-assistant-app-plugin",
]
}
diff --git a/yarn.lock b/yarn.lock
index fb346b620f1a..2617b1e773e0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5332,6 +5332,10 @@
version "0.0.0"
uid ""
+"@kbn/observability-ai-assistant-app-plugin@link:x-pack/plugins/observability_solution/observability_ai_assistant_app":
+ version "0.0.0"
+ uid ""
+
"@kbn/observability-ai-assistant-plugin@link:x-pack/plugins/observability_solution/observability_ai_assistant":
version "0.0.0"
uid ""
From a918e8f72e61f4259fc7f60790a2aadd38bfda0b Mon Sep 17 00:00:00 2001
From: Hannah Mudge
Date: Mon, 11 Mar 2024 08:53:42 -0600
Subject: [PATCH 011/100] [Embeddable] [Visualize] Decouple `EditInLensAction`
from Embeddable framework (#178048)
Part of https://github.com/elastic/kibana/issues/175138
## Summary
This PR decouples the `EditInLensAction` from the Embeddable framework.
### 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
---------
Co-authored-by: Stratoula Kalafateli
---
.../public/actions/edit_in_lens_action.tsx | 148 ++++++++++--------
.../interfaces/has_expression_variables.ts | 29 ++++
2 files changed, 116 insertions(+), 61 deletions(-)
create mode 100644 src/plugins/visualizations/public/embeddable/interfaces/has_expression_variables.ts
diff --git a/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx b/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx
index 2efe612e433c..10f2c26de417 100644
--- a/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx
+++ b/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx
@@ -6,31 +6,41 @@
* Side Public License, v 1.
*/
-import React from 'react';
-import { take } from 'rxjs/operators';
-import { EuiFlexGroup, EuiFlexItem, EuiBadge } from '@elastic/eui';
+import { EuiBadge, EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import { METRIC_TYPE } from '@kbn/analytics';
-import { ActionExecutionContext } from '@kbn/ui-actions-plugin/public';
import { TimefilterContract } from '@kbn/data-plugin/public';
+import { ViewMode } from '@kbn/embeddable-plugin/public';
import { i18n } from '@kbn/i18n';
-import { IEmbeddable, ViewMode } from '@kbn/embeddable-plugin/public';
+import {
+ apiCanAccessViewMode,
+ apiHasUniqueId,
+ CanAccessViewMode,
+ EmbeddableApiContext,
+ getInheritedViewMode,
+ HasUniqueId,
+ PublishesLocalUnifiedSearch,
+ PublishesPanelDescription,
+ PublishesPanelTitle,
+} from '@kbn/presentation-publishing';
import { Action } from '@kbn/ui-actions-plugin/public';
-import { VisualizeEmbeddable } from '../embeddable';
-import { DASHBOARD_VISUALIZATION_PANEL_TRIGGER } from '../triggers';
+import React from 'react';
+import { take } from 'rxjs/operators';
+import { apiHasVisualizeConfig, HasVisualizeConfig } from '../embeddable';
+import {
+ apiHasExpressionVariables,
+ HasExpressionVariables,
+} from '../embeddable/interfaces/has_expression_variables';
import {
- getUiActions,
getApplication,
+ getCapabilities,
getEmbeddable,
+ getUiActions,
getUsageCollection,
- getCapabilities,
} from '../services';
+import { DASHBOARD_VISUALIZATION_PANEL_TRIGGER } from '../triggers';
export const ACTION_EDIT_IN_LENS = 'ACTION_EDIT_IN_LENS';
-export interface EditInLensContext {
- embeddable: IEmbeddable;
-}
-
const displayName = i18n.translate('visualizations.actions.editInLens.displayName', {
defaultMessage: 'Convert to Lens',
});
@@ -50,11 +60,20 @@ const MenuItem: React.FC = () => {
);
};
-const isVisualizeEmbeddable = (embeddable: IEmbeddable): embeddable is VisualizeEmbeddable => {
- return 'getVis' in embeddable;
-};
+type EditInLensActionApi = HasUniqueId &
+ HasVisualizeConfig &
+ CanAccessViewMode &
+ Partial<
+ PublishesLocalUnifiedSearch &
+ HasExpressionVariables &
+ PublishesPanelTitle &
+ PublishesPanelDescription
+ >;
+
+const compatibilityCheck = (api: EmbeddableApiContext['embeddable']): api is EditInLensActionApi =>
+ apiHasUniqueId(api) && apiCanAccessViewMode(api) && apiHasVisualizeConfig(api);
-export class EditInLensAction implements Action {
+export class EditInLensAction implements Action {
public id = ACTION_EDIT_IN_LENS;
public readonly type = ACTION_EDIT_IN_LENS;
public order = 49;
@@ -63,7 +82,7 @@ export class EditInLensAction implements Action {
constructor(private readonly timefilter: TimefilterContract) {}
- async execute(context: ActionExecutionContext): Promise {
+ async execute(context: EmbeddableApiContext): Promise {
const application = getApplication();
if (application?.currentAppId$) {
application.currentAppId$
@@ -73,66 +92,73 @@ export class EditInLensAction implements Action {
getEmbeddable().getStateTransfer().isTransferInProgress = false;
});
}
+
const { embeddable } = context;
- if (isVisualizeEmbeddable(embeddable)) {
- const vis = embeddable.getVis();
- const navigateToLensConfig = await vis.type.navigateToLens?.(vis, this.timefilter);
- // Filters and query set on the visualization level
- const visFilters = vis.data.searchSource?.getField('filter');
- const visQuery = vis.data.searchSource?.getField('query');
- const parentSearchSource = vis.data.searchSource?.getParent();
- const searchFilters = parentSearchSource?.getField('filter') ?? visFilters;
- const searchQuery = parentSearchSource?.getField('query') ?? visQuery;
- const title = vis.title || embeddable.getOutput().title;
- const updatedWithMeta = {
- ...navigateToLensConfig,
- title,
- visTypeTitle: vis.type.title,
- embeddableId: embeddable.id,
- originatingApp: this.currentAppId,
- searchFilters,
- searchQuery,
- isEmbeddable: true,
- description: vis.description || embeddable.getOutput().description,
- panelTimeRange: embeddable.getExplicitInput()?.timeRange,
- };
- if (navigateToLensConfig) {
- if (this.currentAppId) {
- getUsageCollection().reportUiCounter(
- this.currentAppId,
- METRIC_TYPE.CLICK,
- ACTION_EDIT_IN_LENS
- );
- }
- getEmbeddable().getStateTransfer().isTransferInProgress = true;
- getUiActions().getTrigger(DASHBOARD_VISUALIZATION_PANEL_TRIGGER).exec(updatedWithMeta);
+ if (!compatibilityCheck(embeddable)) return;
+
+ const vis = embeddable.getVis();
+ const navigateToLensConfig = await vis.type.navigateToLens?.(vis, this.timefilter);
+ // Filters and query set on the visualization level
+ const visFilters = vis.data.searchSource?.getField('filter');
+ const visQuery = vis.data.searchSource?.getField('query');
+ const parentSearchSource = vis.data.searchSource?.getParent();
+ const searchFilters = parentSearchSource?.getField('filter') ?? visFilters;
+ const searchQuery = parentSearchSource?.getField('query') ?? visQuery;
+ const title = vis.title || embeddable.panelTitle?.getValue();
+ const panelTimeRange = embeddable.localTimeRange?.getValue();
+ const updatedWithMeta = {
+ ...navigateToLensConfig,
+ title,
+ visTypeTitle: vis.type.title,
+ embeddableId: embeddable.uuid,
+ originatingApp: this.currentAppId,
+ searchFilters,
+ searchQuery,
+ isEmbeddable: true,
+ description: vis.description || embeddable.panelDescription?.getValue(),
+ panelTimeRange,
+ };
+ if (navigateToLensConfig) {
+ if (this.currentAppId) {
+ getUsageCollection().reportUiCounter(
+ this.currentAppId,
+ METRIC_TYPE.CLICK,
+ ACTION_EDIT_IN_LENS
+ );
}
+ getEmbeddable().getStateTransfer().isTransferInProgress = true;
+ getUiActions().getTrigger(DASHBOARD_VISUALIZATION_PANEL_TRIGGER).exec(updatedWithMeta);
}
}
- getDisplayName(context: ActionExecutionContext): string {
+ getDisplayName(): string {
return displayName;
}
MenuItem = MenuItem;
- getIconType(context: ActionExecutionContext): string | undefined {
+ getIconType(): string {
return 'merge';
}
- async isCompatible(context: ActionExecutionContext) {
+ async isCompatible(context: EmbeddableApiContext) {
const { embeddable } = context;
- const { visualize } = getCapabilities();
- if (!isVisualizeEmbeddable(embeddable) || !visualize.show) {
+ if (!compatibilityCheck(embeddable) || getInheritedViewMode(embeddable) !== ViewMode.EDIT)
return false;
- }
+
const vis = embeddable.getVis();
- if (!vis) {
+ const { visualize } = getCapabilities();
+ if (!vis || !visualize.show) {
return false;
}
- const canNavigateToLens =
- embeddable.getExpressionVariables?.()?.canNavigateToLens ??
- (await vis.type.navigateToLens?.(vis, this.timefilter));
- return Boolean(canNavigateToLens && embeddable.getInput().viewMode === ViewMode.EDIT);
+
+ // determine whether navigation to lens is available
+ if (
+ apiHasExpressionVariables(embeddable) &&
+ embeddable.getExpressionVariables()?.canNavigateToLens
+ ) {
+ return true;
+ }
+ return Boolean(await vis.type.navigateToLens?.(vis, this.timefilter));
}
}
diff --git a/src/plugins/visualizations/public/embeddable/interfaces/has_expression_variables.ts b/src/plugins/visualizations/public/embeddable/interfaces/has_expression_variables.ts
new file mode 100644
index 000000000000..1a26eafc9734
--- /dev/null
+++ b/src/plugins/visualizations/public/embeddable/interfaces/has_expression_variables.ts
@@ -0,0 +1,29 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { type HasType, apiIsOfType } from '@kbn/presentation-publishing';
+import { Observable } from 'rxjs';
+
+type ExpressionVariables = Record | undefined;
+
+export type HasExpressionVariables = HasType<'visualization'> & {
+ getExpressionVariables: () => ExpressionVariables;
+ getExpressionVariables$: () => Observable;
+};
+
+export const apiHasExpressionVariables = (api: unknown): api is HasExpressionVariables => {
+ const maybeHasExpressionVariables = api as HasExpressionVariables;
+ return Boolean(
+ api &&
+ apiIsOfType(api, 'visualization') &&
+ maybeHasExpressionVariables.getExpressionVariables &&
+ typeof maybeHasExpressionVariables.getExpressionVariables === 'function' &&
+ maybeHasExpressionVariables.getExpressionVariables$ &&
+ typeof maybeHasExpressionVariables.getExpressionVariables$ === 'function'
+ );
+};
From f3f23155968916e289f60cc1b71fb02f74ca7b11 Mon Sep 17 00:00:00 2001
From: Cristina Amico
Date: Mon, 11 Mar 2024 16:00:29 +0100
Subject: [PATCH 012/100] [Fleet] Display warning when trying to upgrade agent
to version > max fleet server version (#178079)
Closes [173727](https://github.com/elastic/kibana/issues/173727)
## Summary
Adding a warning to the agent upgrade modal: when the selected version
is > than the greatest installed fleet server agent, a warning is
presented to the user.
This happens both for a single agent upgrade and for a bulk upgrade. The
submit button is only disabled in the case of a single agent upgrade to
avoid blocking the user from doing a bulk upgrade. In that case the
endpoint will respond with the same error.
Also adding a link to agent upgrade docs and opened a request to improve
the docs: https://github.com/elastic/ingest-docs/issues/966
![Screenshot 2024-03-11 at 10 39
49](https://github.com/elastic/kibana/assets/16084106/5f3765b6-af25-4fa1-99fd-993d561d0f3b)
![Screenshot 2024-03-08 at 17 17
26](https://github.com/elastic/kibana/assets/16084106/1d0cfe26-8d6e-4937-86da-a53072069450)
Warning for "not upgradeable agent":
![Screenshot 2024-03-11 at 10 50
10](https://github.com/elastic/kibana/assets/16084106/249c69c1-0e38-4c73-b2bf-8122a562da49)
### Checklist
- [ ]
[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
- [ ] 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))
---------
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Julia Bardi <90178898+juliaElastic@users.noreply.github.com>
---
x-pack/plugins/fleet/common/errors.ts | 2 +
.../check_fleet_server_versions.test.ts | 39 ++++
.../services/check_fleet_server_versions.ts | 98 ++++++++++
x-pack/plugins/fleet/common/services/index.ts | 5 +
.../components/agent_upgrade_modal/hooks.tsx | 36 +++-
.../agent_upgrade_modal/index.test.tsx | 119 +++++++++++-
.../components/agent_upgrade_modal/index.tsx | 169 ++++++++++++++----
.../routes/agent/upgrade_handler.test.ts | 23 +--
.../server/routes/agent/upgrade_handler.ts | 43 +----
9 files changed, 426 insertions(+), 108 deletions(-)
create mode 100644 x-pack/plugins/fleet/common/services/check_fleet_server_versions.test.ts
create mode 100644 x-pack/plugins/fleet/common/services/check_fleet_server_versions.ts
diff --git a/x-pack/plugins/fleet/common/errors.ts b/x-pack/plugins/fleet/common/errors.ts
index 3b364502dbe0..c43e4a628486 100644
--- a/x-pack/plugins/fleet/common/errors.ts
+++ b/x-pack/plugins/fleet/common/errors.ts
@@ -23,3 +23,5 @@ export class MessageSigningError extends FleetError {}
export class FleetActionsError extends FleetError {}
export class FleetActionsClientError extends FleetError {}
export class UninstallTokenError extends FleetError {}
+
+export class AgentRequestInvalidError extends FleetError {}
diff --git a/x-pack/plugins/fleet/common/services/check_fleet_server_versions.test.ts b/x-pack/plugins/fleet/common/services/check_fleet_server_versions.test.ts
new file mode 100644
index 000000000000..03d00bb96995
--- /dev/null
+++ b/x-pack/plugins/fleet/common/services/check_fleet_server_versions.test.ts
@@ -0,0 +1,39 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { checkFleetServerVersion } from './check_fleet_server_versions';
+
+describe('checkFleetServerVersion', () => {
+ it('should not throw if no force is specified and patch is newer', () => {
+ const fleetServers = [
+ { local_metadata: { elastic: { agent: { version: '8.3.0' } } } },
+ { local_metadata: { elastic: { agent: { version: '8.4.0' } } } },
+ ] as any;
+ expect(() => checkFleetServerVersion('8.4.1', fleetServers, false)).not.toThrowError();
+ expect(() => checkFleetServerVersion('8.4.1-SNAPSHOT', fleetServers, false)).not.toThrowError();
+ });
+
+ it('should throw if no force is specified and minor is newer', () => {
+ const fleetServers = [
+ { local_metadata: { elastic: { agent: { version: '8.3.0' } } } },
+ { local_metadata: { elastic: { agent: { version: '8.4.0' } } } },
+ ] as any;
+ expect(() => checkFleetServerVersion('8.5.1', fleetServers, false)).toThrowError(
+ 'Cannot upgrade to version 8.5.1 because it is higher than the latest fleet server version 8.4.0.'
+ );
+ });
+
+ it('should throw if force is specified and patch should not be considered', () => {
+ const fleetServers = [
+ { local_metadata: { elastic: { agent: { version: '8.3.0' } } } },
+ { local_metadata: { elastic: { agent: { version: '8.4.0' } } } },
+ ] as any;
+ expect(() => checkFleetServerVersion('8.5.1', fleetServers, true)).toThrowError(
+ 'Cannot force upgrade to version 8.5.1 because it does not satisfy the major and minor of the latest fleet server version 8.4.0.'
+ );
+ });
+});
diff --git a/x-pack/plugins/fleet/common/services/check_fleet_server_versions.ts b/x-pack/plugins/fleet/common/services/check_fleet_server_versions.ts
new file mode 100644
index 000000000000..f7e275167173
--- /dev/null
+++ b/x-pack/plugins/fleet/common/services/check_fleet_server_versions.ts
@@ -0,0 +1,98 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import semverGt from 'semver/functions/gt';
+import semverMajor from 'semver/functions/major';
+import semverMinor from 'semver/functions/minor';
+
+import type { Agent } from '../types';
+
+import { AgentRequestInvalidError } from '../errors';
+
+import { differsOnlyInPatch } from '.';
+import { getMaxVersion } from './get_min_max_version';
+
+// Check the installed fleet server version
+export const checkFleetServerVersion = (
+ versionToUpgradeNumber: string,
+ fleetServerAgents: Agent[],
+ force = false
+) => {
+ const message = getFleetServerVersionMessage(versionToUpgradeNumber, fleetServerAgents, force);
+ if (force && message) throw new AgentRequestInvalidError(message);
+ if (message) throw new Error(message);
+};
+
+export const getFleetServerVersionMessage = (
+ versionToUpgradeNumber: string | undefined,
+ fleetServerAgents: Agent[],
+ force = false
+) => {
+ const fleetServerVersions = fleetServerAgents.map(
+ (agent) => agent.local_metadata.elastic.agent.version
+ ) as string[];
+
+ const maxFleetServerVersion = getMaxVersion(fleetServerVersions);
+
+ if (!maxFleetServerVersion || !versionToUpgradeNumber) {
+ return;
+ }
+
+ if (
+ !force &&
+ semverGt(versionToUpgradeNumber, maxFleetServerVersion) &&
+ !differsOnlyInPatch(versionToUpgradeNumber, maxFleetServerVersion)
+ ) {
+ return `Cannot upgrade to version ${versionToUpgradeNumber} because it is higher than the latest fleet server version ${maxFleetServerVersion}.`;
+ }
+
+ const fleetServerMajorGt =
+ semverMajor(maxFleetServerVersion) > semverMajor(versionToUpgradeNumber);
+ const fleetServerMajorEqMinorGte =
+ semverMajor(maxFleetServerVersion) === semverMajor(versionToUpgradeNumber) &&
+ semverMinor(maxFleetServerVersion) >= semverMinor(versionToUpgradeNumber);
+
+ // When force is enabled, only the major and minor versions are checked
+ if (force && !(fleetServerMajorGt || fleetServerMajorEqMinorGte)) {
+ return `Cannot force upgrade to version ${versionToUpgradeNumber} because it does not satisfy the major and minor of the latest fleet server version ${maxFleetServerVersion}.`;
+ }
+};
+
+export const isAgentVersionLessThanFleetServer = (
+ versionToUpgradeNumber: string | undefined,
+ fleetServerAgents: Agent[],
+ force = false
+) => {
+ const fleetServerVersions = fleetServerAgents.map(
+ (agent) => agent.local_metadata.elastic.agent.version
+ ) as string[];
+
+ const maxFleetServerVersion = getMaxVersion(fleetServerVersions);
+
+ if (!maxFleetServerVersion || !versionToUpgradeNumber) {
+ return false;
+ }
+ if (
+ !force &&
+ semverGt(versionToUpgradeNumber, maxFleetServerVersion) &&
+ !differsOnlyInPatch(versionToUpgradeNumber, maxFleetServerVersion)
+ )
+ return false;
+
+ const fleetServerMajorGt =
+ semverMajor(maxFleetServerVersion) > semverMajor(versionToUpgradeNumber);
+ const fleetServerMajorEqMinorGte =
+ semverMajor(maxFleetServerVersion) === semverMajor(versionToUpgradeNumber) &&
+ semverMinor(maxFleetServerVersion) >= semverMinor(versionToUpgradeNumber);
+
+ // When force is enabled, only the major and minor versions are checked
+ if (force && !(fleetServerMajorGt || fleetServerMajorEqMinorGte)) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/x-pack/plugins/fleet/common/services/index.ts b/x-pack/plugins/fleet/common/services/index.ts
index badaff8cb29d..3d1fc77f2a37 100644
--- a/x-pack/plugins/fleet/common/services/index.ts
+++ b/x-pack/plugins/fleet/common/services/index.ts
@@ -80,3 +80,8 @@ export {
isAgentPolicyValidForLicense,
unsetAgentPolicyAccordingToLicenseLevel,
} from './agent_policy_config';
+
+export {
+ getFleetServerVersionMessage,
+ isAgentVersionLessThanFleetServer,
+} from './check_fleet_server_versions';
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/hooks.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/hooks.tsx
index f26dd734354b..1dd949e1f49e 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/hooks.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/hooks.tsx
@@ -4,9 +4,19 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import { useState, useMemo, useCallback } from 'react';
+
+import { useCallback, useState, useMemo } from 'react';
import moment from 'moment';
+import {
+ AGENTS_PREFIX,
+ FLEET_SERVER_PACKAGE,
+ PACKAGE_POLICY_SAVED_OBJECT_TYPE,
+ SO_SEARCH_LIMIT,
+} from '../../../../../../constants';
+
+import { sendGetAgents, sendGetPackagePolicies } from '../../../../../../hooks';
+
export function useScheduleDateTime(now?: string) {
const initialDatetime = useMemo(() => moment(now), [now]);
const [startDatetime, setStartDatetime] = useState(initialDatetime);
@@ -44,3 +54,27 @@ export function useScheduleDateTime(now?: string) {
maxTime,
};
}
+
+export async function sendAllFleetServerAgents() {
+ const packagePoliciesRes = await sendGetPackagePolicies({
+ page: 1,
+ perPage: SO_SEARCH_LIMIT,
+ kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:${FLEET_SERVER_PACKAGE}`,
+ });
+ const agentPolicyIds = [
+ ...new Set(packagePoliciesRes?.data?.items.map((p) => p.policy_id) ?? []),
+ ];
+
+ if (agentPolicyIds.length === 0) {
+ return { allFleetServerAgents: [] };
+ }
+ const kuery = `${AGENTS_PREFIX}.policy_id:${agentPolicyIds.map((id) => `"${id}"`).join(' or ')}`;
+
+ const response = await sendGetAgents({
+ kuery,
+ perPage: SO_SEARCH_LIMIT,
+ showInactive: false,
+ });
+
+ return { allFleetServerAgents: response.data?.items || [] };
+}
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx
index 919a500477f0..30a12409629e 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx
@@ -13,6 +13,8 @@ import { createFleetTestRendererMock } from '../../../../../../mock';
import { sendGetAgentsAvailableVersions, sendPostBulkAgentUpgrade } from '../../../../hooks';
+import { sendAllFleetServerAgents } from './hooks';
+
import { AgentUpgradeAgentModal } from '.';
import type { AgentUpgradeAgentModalProps } from '.';
@@ -33,9 +35,17 @@ jest.mock('../../../../hooks', () => {
};
});
+jest.mock('./hooks', () => {
+ return {
+ ...jest.requireActual('./hooks'),
+ sendAllFleetServerAgents: jest.fn(),
+ };
+});
+
const mockSendPostBulkAgentUpgrade = sendPostBulkAgentUpgrade as jest.Mock;
const mockSendGetAgentsAvailableVersions = sendGetAgentsAvailableVersions as jest.Mock;
+const mockSendAllFleetServerAgents = sendAllFleetServerAgents as jest.Mock;
function renderAgentUpgradeAgentModal(props: Partial) {
const renderer = createFleetTestRendererMock();
@@ -43,7 +53,6 @@ function renderAgentUpgradeAgentModal(props: Partial {}} {...props} />
);
-
return { utils };
}
@@ -180,10 +189,113 @@ describe('AgentUpgradeAgentModal', () => {
);
expect(optionList.textContent).toEqual(['8.10.4', '8.10.2+build123456789'].join(''));
});
+
+ it('should disable submit button and display a warning for a single agent when version is greater than maxFleetServerVersion', async () => {
+ mockSendGetAgentsAvailableVersions.mockClear();
+ mockSendGetAgentsAvailableVersions.mockResolvedValue({
+ data: {
+ items: ['8.10.4', '8.10.2', '8.9.0', '8.8.0'],
+ },
+ });
+ mockSendAllFleetServerAgents.mockResolvedValue({
+ allFleetServerAgents: [
+ { id: 'fleet-server', local_metadata: { elastic: { agent: { version: '8.9.0' } } } },
+ ] as any,
+ });
+
+ const { utils } = renderAgentUpgradeAgentModal({
+ agents: [
+ {
+ id: 'agent1',
+ local_metadata: {
+ elastic: {
+ agent: { version: '8.8.0', upgradeable: true },
+ },
+ host: { hostname: 'host00001' },
+ },
+ },
+ ] as any,
+ agentCount: 1,
+ });
+
+ await waitFor(() => {
+ const container = utils.getByTestId('agentUpgradeModal.VersionCombobox');
+ const input = within(container).getByRole('combobox');
+ expect(input?.value).toEqual('8.10.2');
+ expect(
+ utils.queryAllByText(
+ /This action will upgrade the agent running on 'host00001' to version 8.10.2. This action can not be undone. Are you sure you wish to continue?/
+ )
+ );
+ expect(
+ utils.queryByText(
+ /Cannot upgrade to version 8.10.2 because it is higher than the latest fleet server version 8.9.0./
+ )
+ ).toBeInTheDocument();
+ const el = utils.getByTestId('confirmModalConfirmButton');
+ expect(el).toBeDisabled();
+ });
+ });
+
+ it('should display a warning for multiple agents when version is greater than maxFleetServerVersion and not disable submit button', async () => {
+ mockSendGetAgentsAvailableVersions.mockClear();
+ mockSendGetAgentsAvailableVersions.mockResolvedValue({
+ data: {
+ items: ['8.10.4', '8.10.2', '8.9.0', '8.8.0'],
+ },
+ });
+ mockSendAllFleetServerAgents.mockResolvedValue({
+ allFleetServerAgents: [
+ { id: 'fleet-server', local_metadata: { elastic: { agent: { version: '8.9.0' } } } },
+ ] as any,
+ });
+
+ const { utils } = renderAgentUpgradeAgentModal({
+ agents: [
+ {
+ id: 'agent1',
+ local_metadata: {
+ elastic: {
+ agent: { version: '8.8.0', upgradeable: true },
+ },
+ host: { hostname: 'host00001' },
+ },
+ },
+ {
+ id: 'agent2',
+ local_metadata: {
+ elastic: {
+ agent: { version: '8.8.1', upgradeable: true },
+ },
+ host: { hostname: 'host00002' },
+ },
+ },
+ ] as any,
+ agentCount: 1,
+ });
+
+ await waitFor(() => {
+ const container = utils.getByTestId('agentUpgradeModal.VersionCombobox');
+ const input = within(container).getByRole('combobox');
+ expect(input?.value).toEqual('8.10.2');
+ expect(
+ utils.queryAllByText(
+ /This action will upgrade multiple agents to version 8.10.2. This action can not be undone. Are you sure you wish to continue?/
+ )
+ );
+ expect(
+ utils.queryByText(
+ /Please choose another version. Cannot upgrade to version 8.10.2 because it is higher than the latest fleet server version 8.9.0./
+ )
+ ).toBeInTheDocument();
+ const el = utils.getByTestId('confirmModalConfirmButton');
+ expect(el).not.toBeDisabled();
+ });
+ });
});
describe('restart upgrade', () => {
- it('should restart uprade on updating agents if some agents in updating', async () => {
+ it('should restart upgrade on updating agents if some agents in updating', async () => {
const { utils } = renderAgentUpgradeAgentModal({
agents: [
{ status: 'updating', upgrade_started_at: '2022-11-21T12:27:24Z', id: 'agent1' },
@@ -266,10 +378,9 @@ describe('AgentUpgradeAgentModal', () => {
agentCount: 2,
});
await waitFor(() => {
- expect(utils.queryByText(/The selected agent is not upgradeable/)).toBeInTheDocument();
expect(
utils.queryByText(
- /Reason: agent cannot be upgraded through Fleet. It may be running in a container or it is not installed as a service./
+ /The selected agent is not upgradeable: agent cannot be upgraded through Fleet. It may be running in a container or it is not installed as a service./
)
).toBeInTheDocument();
const el = utils.getByTestId('confirmModalConfirmButton');
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx
index e333efb152ea..9b3af9f1c29e 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx
@@ -20,6 +20,7 @@ import {
EuiCallOut,
EuiDatePicker,
EuiFieldText,
+ EuiLink,
} from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
@@ -28,9 +29,13 @@ import type { EuiComboBoxOptionOption } from '@elastic/eui';
import semverGt from 'semver/functions/gt';
import semverLt from 'semver/functions/lt';
-import { AGENT_UPGRADE_COOLDOWN_IN_MIN } from '../../../../../../../common/services';
+import {
+ AGENT_UPGRADE_COOLDOWN_IN_MIN,
+ getMinVersion,
+ getFleetServerVersionMessage,
+ isAgentVersionLessThanFleetServer,
+} from '../../../../../../../common/services';
-import { getMinVersion } from '../../../../../../../common/services/get_min_max_version';
import {
AGENT_UPDATING_TIMEOUT_HOURS,
isStuckInUpdating,
@@ -59,7 +64,7 @@ import {
MAINTENANCE_VALUES,
ROLLING_UPGRADE_MINIMUM_SUPPORTED_VERSION,
} from './constants';
-import { useScheduleDateTime } from './hooks';
+import { useScheduleDateTime, sendAllFleetServerAgents } from './hooks';
export interface AgentUpgradeAgentModalProps {
onClose: () => void;
@@ -86,7 +91,7 @@ export const AgentUpgradeAgentModal: React.FunctionComponent {
- const { notifications } = useStartServices();
+ const { notifications, docLinks } = useStartServices();
const kibanaVersion = useKibanaVersion() || '';
const config = useConfig();
const [isSubmitting, setIsSubmitting] = useState(false);
@@ -100,6 +105,8 @@ export const AgentUpgradeAgentModal: React.FunctionComponent(0);
const [updatingQuery, setUpdatingQuery] = useState('');
+ const [fleetServerAgents, setFleetServerAgents] = useState([]);
+
const QUERY_STUCK_UPDATING = `status:updating AND upgrade_started_at:* AND NOT upgraded_at:* AND upgrade_started_at < now-${AGENT_UPDATING_TIMEOUT_HOURS}h`;
const EMPTY_VALUE = useMemo(() => ({ label: '', value: '' }), []);
const [isInvalid, setIsInvalid] = useState(false);
@@ -155,6 +162,19 @@ export const AgentUpgradeAgentModal: React.FunctionComponent {
+ const fetchFleetServerAgents = async () => {
+ try {
+ const { allFleetServerAgents } = await sendAllFleetServerAgents();
+ setFleetServerAgents(allFleetServerAgents);
+ } catch (error) {
+ return;
+ }
+ };
+
+ fetchFleetServerAgents();
+ }, []);
+
const minVersion = useMemo(() => {
if (!Array.isArray(agents)) {
// when agent is a query, don't set minVersion, so the versions are available to select
@@ -208,7 +228,6 @@ export const AgentUpgradeAgentModal: React.FunctionComponent {
+ if (
+ isSingleAgent &&
+ selectedVersion[0]?.value &&
+ !isAgentUpgradeableToVersion(agents[0], selectedVersion[0].value)
+ ) {
+ return `The selected agent is not upgradeable: ${getNotUpgradeableMessage(
+ agents[0],
+ latestAgentVersion,
+ selectedVersion[0].value
+ )}`;
+ }
+ if (
+ selectedVersion[0]?.value &&
+ !isAgentVersionLessThanFleetServer(selectedVersion[0].value, fleetServerAgents)
+ ) {
+ return `Please choose another version. ${getFleetServerVersionMessage(
+ selectedVersion[0].value,
+ fleetServerAgents
+ )}`;
+ }
+ }, [agents, fleetServerAgents, isSingleAgent, latestAgentVersion, selectedVersion]);
+
const [selectedMaintenanceWindow, setSelectedMaintenanceWindow] = useState([
isSmallBatch ? maintenanceOptions[0] : maintenanceOptions[1],
]);
@@ -231,6 +273,25 @@ export const AgentUpgradeAgentModal: React.FunctionComponent
+ isSubmitting ||
+ (isUpdating && updatingAgents === 0) ||
+ !selectedVersion[0].value ||
+ (isSingleAgent && !isAgentUpgradeableToVersion(agents[0], selectedVersion[0].value)) ||
+ (isSingleAgent &&
+ !isAgentVersionLessThanFleetServer(selectedVersion[0].value, fleetServerAgents)),
+ [
+ agents,
+ fleetServerAgents,
+ isSingleAgent,
+ isSubmitting,
+ isUpdating,
+ selectedVersion,
+ updatingAgents,
+ ]
+ );
+
async function onSubmit() {
const version = getVersion(selectedVersion);
const rolloutOptions = {
@@ -343,12 +404,7 @@ export const AgentUpgradeAgentModal: React.FunctionComponent
}
- confirmButtonDisabled={
- isSubmitting ||
- (isUpdating && updatingAgents === 0) ||
- !selectedVersion[0].value ||
- (isSingleAgent && !isAgentUpgradeableToVersion(agents[0], selectedVersion[0].value))
- }
+ confirmButtonDisabled={isSubmitButtonDisabled}
confirmButtonText={
isSingleAgent ? (
) : isSingleAgent ? (
- selectedVersion[0].value &&
- !isAgentUpgradeableToVersion(agents[0], selectedVersion[0].value) ? (
-
- }
- >
-
-
+ warningMessage ? (
+
) : (
<>
@@ -426,10 +459,22 @@ export const AgentUpgradeAgentModal: React.FunctionComponent
+
+
+
+
+ ),
}}
/>
@@ -437,6 +482,8 @@ export const AgentUpgradeAgentModal: React.FunctionComponent
)
+ ) : warningMessage ? (
+
) : (
+
+
+
+
+ ),
}}
/>
@@ -607,3 +664,37 @@ export const AgentUpgradeAgentModal: React.FunctionComponent
);
};
+
+export const UpgradeModalWarningCallout: React.FunctionComponent<{ warningMessage: string }> = ({
+ warningMessage,
+}) => {
+ const { docLinks } = useStartServices();
+ return (
+
+ }
+ >
+
+
+
+
+
+ ),
+ }}
+ />
+
+ );
+};
diff --git a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.test.ts b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.test.ts
index f6d7f460119f..ce8f181d05cb 100644
--- a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.test.ts
+++ b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.test.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { checkFleetServerVersion, checkKibanaVersion } from './upgrade_handler';
+import { checkKibanaVersion } from './upgrade_handler';
describe('upgrade handler', () => {
describe('checkKibanaVersion', () => {
@@ -42,25 +42,4 @@ describe('upgrade handler', () => {
expect(() => checkKibanaVersion('8.4.0', '8.4.0', true)).not.toThrowError();
});
});
-
- describe('checkFleetServerVersion', () => {
- it('should not throw if no force is specified and patch is newer', () => {
- const fleetServers = [
- { local_metadata: { elastic: { agent: { version: '8.3.0' } } } },
- { local_metadata: { elastic: { agent: { version: '8.4.0' } } } },
- ] as any;
- expect(() => checkFleetServerVersion('8.4.1', fleetServers, false)).not.toThrowError();
- expect(() =>
- checkFleetServerVersion('8.4.1-SNAPSHOT', fleetServers, false)
- ).not.toThrowError();
- });
-
- it('should throw if no force is specified and minor is newer', () => {
- const fleetServers = [
- { local_metadata: { elastic: { agent: { version: '8.3.0' } } } },
- { local_metadata: { elastic: { agent: { version: '8.4.0' } } } },
- ] as any;
- expect(() => checkFleetServerVersion('8.5.1', fleetServers, false)).toThrowError();
- });
- });
});
diff --git a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts
index 6073d8b12170..f46cdc96cd7c 100644
--- a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts
+++ b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts
@@ -28,9 +28,8 @@ import {
isAgentUpgradeableToVersion,
differsOnlyInPatch,
} from '../../../common/services';
-import { getMaxVersion } from '../../../common/services/get_min_max_version';
+import { checkFleetServerVersion } from '../../../common/services/check_fleet_server_versions';
import { getAgentById } from '../../services/agents';
-import type { Agent } from '../../types';
import { getAllFleetServerAgents } from '../../collectors/get_all_fleet_server_agents';
import { getLatestAvailableVersion } from '../../services/agents/versions';
@@ -223,43 +222,3 @@ export const checkKibanaVersion = (version: string, kibanaVersion: string, force
);
}
};
-
-// Check the installed fleet server version
-export const checkFleetServerVersion = (
- versionToUpgradeNumber: string,
- fleetServerAgents: Agent[],
- force = false
-) => {
- const fleetServerVersions = fleetServerAgents.map(
- (agent) => agent.local_metadata.elastic.agent.version
- ) as string[];
-
- const maxFleetServerVersion = getMaxVersion(fleetServerVersions);
-
- if (!maxFleetServerVersion) {
- return;
- }
-
- if (
- !force &&
- semverGt(versionToUpgradeNumber, maxFleetServerVersion) &&
- !differsOnlyInPatch(versionToUpgradeNumber, maxFleetServerVersion)
- ) {
- throw new Error(
- `cannot upgrade agent to ${versionToUpgradeNumber} because it is higher than the latest fleet server version ${maxFleetServerVersion}`
- );
- }
-
- const fleetServerMajorGt =
- semverMajor(maxFleetServerVersion) > semverMajor(versionToUpgradeNumber);
- const fleetServerMajorEqMinorGte =
- semverMajor(maxFleetServerVersion) === semverMajor(versionToUpgradeNumber) &&
- semverMinor(maxFleetServerVersion) >= semverMinor(versionToUpgradeNumber);
-
- // When force is enabled, only the major and minor versions are checked
- if (force && !(fleetServerMajorGt || fleetServerMajorEqMinorGte)) {
- throw new AgentRequestInvalidError(
- `Cannot force upgrade agent to ${versionToUpgradeNumber} because it does not satisfy the major and minor of the latest fleet server version ${maxFleetServerVersion}`
- );
- }
-};
From f3c0a1c013cacf88f2231d4afa7efa6c023a94cc Mon Sep 17 00:00:00 2001
From: Elena Stoeva <59341489+ElenaStoeva@users.noreply.github.com>
Date: Mon, 11 Mar 2024 15:30:38 +0000
Subject: [PATCH 013/100] [Advanced Settings] Unskip api integration tests
(#178349)
Closes https://github.com/elastic/kibana/issues/176445
## Summary
This PR unskips the api integration tests for Advanced settings as they
are passing successfully on `main`. The two failures in
https://github.com/elastic/kibana/issues/176445 might have been caused
by some fluctuations in the CI test environment.
Flaky test runner build:
https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5429
---
.../apis/management/advanced_settings/feature_controls.ts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts b/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts
index 4f6333238fa5..4af49a399161 100644
--- a/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts
+++ b/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts
@@ -78,8 +78,7 @@ export default function featureControlsTests({ getService }: FtrProviderContext)
.catch((error: any) => ({ error, response: undefined }));
}
- // FLAKY: https://github.com/elastic/kibana/issues/176445
- describe.skip('feature controls', () => {
+ describe('feature controls', () => {
it(`settings can be saved with the advancedSettings: ["all"] feature privilege`, async () => {
const username = 'settings_all';
const roleName = 'settings_all';
From 813b51537475614d02e5c32bea0ca8829384f69e Mon Sep 17 00:00:00 2001
From: Jon
Date: Mon, 11 Mar 2024 16:37:50 +0100
Subject: [PATCH 014/100] [ci] Update kibana-ci-apm endpoint (#177727)
This updates APM metrics collected by CI to a serverless project
endpoint.
---
.buildkite/scripts/common/env.sh | 5 +----
.buildkite/scripts/lifecycle/pre_command.sh | 7 +++++++
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/.buildkite/scripts/common/env.sh b/.buildkite/scripts/common/env.sh
index 89c9dce5a3b8..90ec7d3bf0e7 100755
--- a/.buildkite/scripts/common/env.sh
+++ b/.buildkite/scripts/common/env.sh
@@ -69,10 +69,7 @@ export FORCE_COLOR=1
export TEST_BROWSER_HEADLESS=1
export ELASTIC_APM_ENVIRONMENT=ci
-export ELASTIC_APM_TRANSACTION_SAMPLE_RATE=0.1
-export ELASTIC_APM_SERVER_URL=https://kibana-ci-apm.apm.us-central1.gcp.cloud.es.io
-# Not really a secret, if APM supported public auth we would use it and APM requires that we use this name
-export ELASTIC_APM_SECRET_TOKEN=7YKhoXsO4MzjhXjx2c
+export ELASTIC_APM_TRANSACTION_SAMPLE_RATE=0.01
if is_pr; then
if is_pr_with_label "ci:collect-apm"; then
diff --git a/.buildkite/scripts/lifecycle/pre_command.sh b/.buildkite/scripts/lifecycle/pre_command.sh
index 6079df9a9add..1e77fa11303c 100755
--- a/.buildkite/scripts/lifecycle/pre_command.sh
+++ b/.buildkite/scripts/lifecycle/pre_command.sh
@@ -154,6 +154,13 @@ export GCS_SA_CDN_BUCKET
GCS_SA_CDN_URL="$(vault_get gcs-sa-cdn-prod cdn)"
export GCS_SA_CDN_URL
+
+ELASTIC_APM_SERVER_URL=$(vault_get project-kibana-ci-apm apm_server_url)
+export ELASTIC_APM_SERVER_URL
+
+ELASTIC_APM_API_KEY=$(vault_get project-kibana-ci-apm apm_server_api_key)
+export ELASTIC_APM_API_KEY
+
# Setup Failed Test Reporter Elasticsearch credentials
{
TEST_FAILURES_ES_CLOUD_ID=$(vault_get failed_tests_reporter_es cloud_id)
From abb84a6426d3599c961ce685d365da923f898eb6 Mon Sep 17 00:00:00 2001
From: Luke G <11671118+lgestc@users.noreply.github.com>
Date: Mon, 11 Mar 2024 16:38:54 +0100
Subject: [PATCH 015/100] [Security Solution] Remove filterManager from
timeline's redux state (#178250)
## Summary
This removes the filter manager from the timeline store
---
.../filter/cell_action/filter_in.test.ts | 16 ++++++-------
.../actions/filter/cell_action/filter_in.ts | 12 +---------
.../filter/cell_action/filter_out.test.ts | 24 ++++++++++---------
.../actions/filter/cell_action/filter_out.ts | 12 +---------
.../actions/filter/lens/create_action.ts | 2 +-
.../hover_actions/use_hover_action_items.tsx | 16 +++----------
.../common/lib/kibana/kibana_react.mock.ts | 4 ++++
.../public/common/store/store.ts | 1 -
.../use_investigate_in_timeline.tsx | 19 +++------------
.../security_solution/public/plugin.tsx | 9 +++++--
.../use_investigate_in_timeline.ts | 24 ++++---------------
.../timeline/query_tab_content/index.tsx | 23 ++++--------------
.../public/timelines/store/helpers.test.ts | 18 --------------
.../public/timelines/store/helpers.ts | 1 -
.../public/timelines/store/model.ts | 5 +---
.../public/timelines/store/types.ts | 2 --
.../plugins/security_solution/public/types.ts | 3 ++-
17 files changed, 51 insertions(+), 140 deletions(-)
diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts
index 89dad46c09ef..178757d83578 100644
--- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts
+++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts
@@ -5,18 +5,17 @@
* 2.0.
*/
-import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock';
+import { KBN_FIELD_TYPES } from '@kbn/field-types';
+import { TableId } from '@kbn/securitysolution-data-table';
+
import { createMockStore, mockGlobalState } from '../../../common/mock';
import { createFilterInCellActionFactory } from './filter_in';
import type { SecurityCellActionExecutionContext } from '../../types';
-import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock';
-import { TableId } from '@kbn/securitysolution-data-table';
import { TimelineId } from '../../../../common/types';
-import { KBN_FIELD_TYPES } from '@kbn/field-types';
+import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock';
const services = createStartServicesMock();
const mockGlobalFilterManager = services.data.query.filterManager;
-const mockTimelineFilterManager = createFilterManagerMock();
const mockWarningToast = services.notifications.toasts.addWarning;
const mockState = {
@@ -27,7 +26,6 @@ const mockState = {
...mockGlobalState.timeline.timelineById,
[TimelineId.active]: {
...mockGlobalState.timeline.timelineById[TimelineId.active],
- filterManager: mockTimelineFilterManager,
},
},
},
@@ -110,7 +108,7 @@ describe('createFilterInCellActionFactory', () => {
it('should execute using generic filterManager', async () => {
await filterInAction.execute(dataTableContext);
expect(mockGlobalFilterManager.addFilters).toHaveBeenCalled();
- expect(mockTimelineFilterManager.addFilters).not.toHaveBeenCalled();
+ expect(services.timelineFilterManager.addFilters).not.toHaveBeenCalled();
});
it('should show warning if value type is unsupported', async () => {
@@ -124,7 +122,7 @@ describe('createFilterInCellActionFactory', () => {
],
});
expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled();
- expect(mockTimelineFilterManager.addFilters).not.toHaveBeenCalled();
+ expect(services.timelineFilterManager.addFilters).not.toHaveBeenCalled();
expect(mockWarningToast).toHaveBeenCalled();
});
});
@@ -137,7 +135,7 @@ describe('createFilterInCellActionFactory', () => {
it('should execute using timeline filterManager', async () => {
await filterInAction.execute(timelineContext);
- expect(mockTimelineFilterManager.addFilters).toHaveBeenCalled();
+ expect(services.timelineFilterManager.addFilters).toHaveBeenCalled();
expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled();
});
});
diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts
index 58560dd58742..fb85c32963d0 100644
--- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts
+++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts
@@ -15,23 +15,18 @@ import {
import type { KBN_FIELD_TYPES } from '@kbn/field-types';
import { ACTION_INCOMPATIBLE_VALUE_WARNING } from '@kbn/cell-actions/src/actions/translations';
import type { SecurityAppStore } from '../../../common/store';
-import { timelineSelectors } from '../../../timelines/store';
import { fieldHasCellActions } from '../../utils';
-import { TimelineId } from '../../../../common/types';
import { isTimelineScope } from '../../../helpers';
import { SecurityCellActionType } from '../../constants';
import type { StartServices } from '../../../types';
import type { SecurityCellAction } from '../../types';
export const createFilterInCellActionFactory = ({
- store,
services,
}: {
store: SecurityAppStore;
services: StartServices;
}) => {
- const getTimelineById = timelineSelectors.getTimelineByIdSelector();
-
const { filterManager } = services.data.query;
const { notifications } = services;
const genericFilterInActionFactory = createFilterInActionFactory({
@@ -70,12 +65,7 @@ export const createFilterInCellActionFactory = ({
const addFilter = metadata?.negateFilters === true ? addFilterOut : addFilterIn;
if (metadata?.scopeId && isTimelineScope(metadata.scopeId)) {
- const timelineFilterManager = getTimelineById(
- store.getState(),
- TimelineId.active
- )?.filterManager;
-
- addFilter({ filterManager: timelineFilterManager, fieldName, value, dataViewId });
+ addFilter({ filterManager: services.timelineFilterManager, fieldName, value, dataViewId });
} else {
addFilter({ filterManager, fieldName, value, dataViewId });
}
diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts
index 28db39739611..23e7fb7e3f66 100644
--- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts
+++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts
@@ -5,19 +5,19 @@
* 2.0.
*/
-import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock';
import { createMockStore, mockGlobalState } from '../../../common/mock';
import { createFilterOutCellActionFactory } from './filter_out';
import type { SecurityCellActionExecutionContext } from '../../types';
-import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock';
import { TimelineId } from '../../../../common/types';
import { TableId } from '@kbn/securitysolution-data-table';
import { KBN_FIELD_TYPES } from '@kbn/field-types';
-const services = createStartServicesMock();
-const mockGlobalFilterManager = services.data.query.filterManager;
-const mockTimelineFilterManager = createFilterManagerMock();
-const mockWarningToast = services.notifications.toasts.addWarning;
+import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock';
+
+const mockServices = createStartServicesMock();
+
+const mockGlobalFilterManager = mockServices.data.query.filterManager;
+const mockWarningToast = mockServices.notifications.toasts.addWarning;
const mockState = {
...mockGlobalState,
@@ -27,7 +27,6 @@ const mockState = {
...mockGlobalState.timeline.timelineById,
[TimelineId.active]: {
...mockGlobalState.timeline.timelineById[TimelineId.active],
- filterManager: mockTimelineFilterManager,
},
},
},
@@ -36,7 +35,10 @@ const mockState = {
const mockStore = createMockStore(mockState);
describe('createFilterOutCellActionFactory', () => {
- const filterOutActionFactory = createFilterOutCellActionFactory({ store: mockStore, services });
+ const filterOutActionFactory = createFilterOutCellActionFactory({
+ store: mockStore,
+ services: mockServices,
+ });
const filterOutAction = filterOutActionFactory({ id: 'testAction' });
beforeEach(() => {
@@ -103,7 +105,7 @@ describe('createFilterOutCellActionFactory', () => {
it('should execute using generic filterManager', async () => {
await filterOutAction.execute(dataTableContext);
expect(mockGlobalFilterManager.addFilters).toHaveBeenCalled();
- expect(mockTimelineFilterManager.addFilters).not.toHaveBeenCalled();
+ expect(mockServices.timelineFilterManager.addFilters).not.toHaveBeenCalled();
});
it('should show warning if value type is unsupported', async () => {
@@ -117,7 +119,7 @@ describe('createFilterOutCellActionFactory', () => {
],
});
expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled();
- expect(mockTimelineFilterManager.addFilters).not.toHaveBeenCalled();
+ expect(mockServices.timelineFilterManager.addFilters).not.toHaveBeenCalled();
expect(mockWarningToast).toHaveBeenCalled();
});
});
@@ -130,7 +132,7 @@ describe('createFilterOutCellActionFactory', () => {
it('should execute using timeline filterManager', async () => {
await filterOutAction.execute(timelineContext);
- expect(mockTimelineFilterManager.addFilters).toHaveBeenCalled();
+ expect(mockServices.timelineFilterManager.addFilters).toHaveBeenCalled();
expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled();
});
});
diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts
index 6f2da616d0f2..bbc433e94256 100644
--- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts
+++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts
@@ -17,21 +17,16 @@ import type { KBN_FIELD_TYPES } from '@kbn/field-types';
import { fieldHasCellActions } from '../../utils';
import type { SecurityAppStore } from '../../../common/store';
import type { StartServices } from '../../../types';
-import { timelineSelectors } from '../../../timelines/store';
-import { TimelineId } from '../../../../common/types';
import { isTimelineScope } from '../../../helpers';
import type { SecurityCellAction } from '../../types';
import { SecurityCellActionType } from '../../constants';
export const createFilterOutCellActionFactory = ({
- store,
services,
}: {
store: SecurityAppStore;
services: StartServices;
}) => {
- const getTimelineById = timelineSelectors.getTimelineByIdSelector();
-
const { filterManager } = services.data.query;
const { notifications } = services;
@@ -70,12 +65,7 @@ export const createFilterOutCellActionFactory = ({
const addFilter = metadata?.negateFilters === true ? addFilterIn : addFilterOut;
if (metadata?.scopeId && isTimelineScope(metadata.scopeId)) {
- const timelineFilterManager = getTimelineById(
- store.getState(),
- TimelineId.active
- )?.filterManager;
-
- addFilter({ filterManager: timelineFilterManager, fieldName, value, dataViewId });
+ addFilter({ filterManager: services.timelineFilterManager, fieldName, value, dataViewId });
} else {
addFilter({ filterManager, fieldName, value, dataViewId });
}
diff --git a/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts b/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts
index a3a7d58cf282..e0da4447506c 100644
--- a/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts
+++ b/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts
@@ -92,7 +92,7 @@ export const createFilterLensAction = ({
const timeline = getTimelineById(store.getState(), TimelineId.active);
// timeline is open add the filter to timeline, otherwise add filter to global filters
const filterManager = timeline?.show
- ? timeline.filterManager
+ ? services.timelineFilterManager
: dataService.query.filterManager;
addFilter({ filterManager, fieldName: field, value, dataViewId });
diff --git a/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx b/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx
index adfcf04e0ec1..c5e4ae70cfe2 100644
--- a/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx
+++ b/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx
@@ -11,17 +11,14 @@ import type { DraggableId } from '@hello-pangea/dnd';
import { isEmpty } from 'lodash';
-import { FilterManager } from '@kbn/data-plugin/public';
import { useDispatch } from 'react-redux';
import { getSourcererScopeId, isActiveTimeline } from '../../../helpers';
-import { timelineSelectors } from '../../../timelines/store';
import { useKibana } from '../../lib/kibana';
import { allowTopN } from '../drag_and_drop/helpers';
import type { ColumnHeaderOptions, DataProvider } from '../../../../common/types/timeline';
import { TimelineId } from '../../../../common/types/timeline';
import { ShowTopNButton } from './actions/show_top_n';
import { addProvider } from '../../../timelines/store/actions';
-import { useDeepEqualSelector } from '../../hooks/use_selector';
import { useDataViewId } from '../../hooks/use_data_view_id';
export interface UseHoverActionItemsProps {
dataProvider?: DataProvider | DataProvider[];
@@ -85,7 +82,7 @@ export const useHoverActionItems = ({
}: UseHoverActionItemsProps): UseHoverActionItems => {
const kibana = useKibana();
const dispatch = useDispatch();
- const { timelines, uiSettings } = kibana.services;
+ const { timelines, timelineFilterManager } = kibana.services;
const dataViewId = useDataViewId(getSourcererScopeId(scopeId ?? ''));
// Common actions used by the alert table and alert flyout
@@ -101,17 +98,10 @@ export const useHoverActionItems = ({
() => kibana.services.data.query.filterManager,
[kibana.services.data.query.filterManager]
);
- const getTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []);
- const activeFilterManager = useDeepEqualSelector((state) =>
- isActiveTimeline(scopeId ?? '') ? getTimeline(state, scopeId ?? '')?.filterManager : undefined
- );
const filterManager = useMemo(
- () =>
- isActiveTimeline(scopeId ?? '')
- ? activeFilterManager ?? new FilterManager(uiSettings)
- : filterManagerBackup,
- [scopeId, activeFilterManager, uiSettings, filterManagerBackup]
+ () => (isActiveTimeline(scopeId ?? '') ? timelineFilterManager : filterManagerBackup),
+ [scopeId, timelineFilterManager, filterManagerBackup]
);
/*
diff --git a/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts b/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts
index 8525f40d47d1..5cd2363e32d0 100644
--- a/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts
+++ b/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts
@@ -14,6 +14,8 @@ import { coreMock, themeServiceMock } from '@kbn/core/public/mocks';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { dataPluginMock } from '@kbn/data-plugin/public/mocks';
import { securityMock } from '@kbn/security-plugin/public/mocks';
+import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock';
+
import {
DEFAULT_APP_REFRESH_INTERVAL,
DEFAULT_APP_TIME_RANGE,
@@ -121,6 +123,7 @@ export const createStartServicesMock = (
const guidedOnboarding = guidedOnboardingMock.createStart();
const cloud = cloudMock.createStart();
const mockSetHeaderActionMenu = jest.fn();
+ const mockTimelineFilterManager = createFilterManagerMock();
return {
...core,
@@ -219,6 +222,7 @@ export const createStartServicesMock = (
uiActions: uiActionsPluginMock.createStartContract(),
savedSearch: savedSearchPluginMock.createStartContract(),
setHeaderActionMenu: mockSetHeaderActionMenu,
+ timelineFilterManager: mockTimelineFilterManager,
} as unknown as StartServices;
};
diff --git a/x-pack/plugins/security_solution/public/common/store/store.ts b/x-pack/plugins/security_solution/public/common/store/store.ts
index a3b8a44aad0f..9f7f1b035fc0 100644
--- a/x-pack/plugins/security_solution/public/common/store/store.ts
+++ b/x-pack/plugins/security_solution/public/common/store/store.ts
@@ -234,7 +234,6 @@ const sanitizeDataView = (dataView: SourcererDataView) => {
const sanitizeTimelineModel = (timeline: TimelineModel) => {
return {
...timeline,
- filterManager: 'filterManager',
footerText: 'footerText',
loadingText: 'loadingText',
};
diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.tsx
index 7b65dc34727a..9642bb5be9a3 100644
--- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.tsx
+++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.tsx
@@ -19,17 +19,15 @@ import { useApi } from '@kbn/securitysolution-list-hooks';
import type { Filter } from '@kbn/es-query';
import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs';
import { createHistoryEntry } from '../../../../common/utils/global_query_string/helpers';
-import { timelineDefaults } from '../../../../timelines/store/defaults';
import { useKibana } from '../../../../common/lib/kibana';
import { TimelineId } from '../../../../../common/types/timeline';
import { TimelineType } from '../../../../../common/api/timeline';
-import { timelineActions, timelineSelectors } from '../../../../timelines/store';
+import { timelineActions } from '../../../../timelines/store';
import { sendAlertToTimelineAction } from '../actions';
import { dispatchUpdateTimeline } from '../../../../timelines/components/open_timeline/helpers';
import { useCreateTimeline } from '../../../../timelines/hooks/use_create_timeline';
import type { CreateTimelineProps } from '../types';
import { ACTION_INVESTIGATE_IN_TIMELINE } from '../translations';
-import { useDeepEqualSelector } from '../../../../common/hooks/use_selector';
import { getField } from '../../../../helpers';
import { useAppToasts } from '../../../../common/hooks/use_app_toasts';
import { useStartTransaction } from '../../../../common/lib/apm/use_start_transaction';
@@ -96,7 +94,7 @@ export const useInvestigateInTimeline = ({
}: UseInvestigateInTimelineActionProps) => {
const { addError } = useAppToasts();
const {
- data: { search: searchStrategyClient, query },
+ data: { search: searchStrategyClient },
} = useKibana().services;
const dispatch = useDispatch();
const { startTransaction } = useStartTransaction();
@@ -133,16 +131,6 @@ export const useInvestigateInTimeline = ({
[addError, getExceptionFilterFromIds]
);
- const filterManagerBackup = useMemo(() => query.filterManager, [query.filterManager]);
- const getManageTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []);
- const { filterManager: activeFilterManager } = useDeepEqualSelector(
- (state) => getManageTimeline(state, TimelineId.active ?? '') ?? timelineDefaults
- );
- const filterManager = useMemo(
- () => activeFilterManager ?? filterManagerBackup,
- [activeFilterManager, filterManagerBackup]
- );
-
const updateTimelineIsLoading = useCallback(
(payload) => dispatch(timelineActions.updateIsLoading(payload)),
[dispatch]
@@ -164,7 +152,6 @@ export const useInvestigateInTimeline = ({
notes: [],
timeline: {
...timeline,
- filterManager,
indexNames: timeline.indexNames ?? [],
show: true,
},
@@ -172,7 +159,7 @@ export const useInvestigateInTimeline = ({
ruleNote,
})();
},
- [dispatch, filterManager, updateTimelineIsLoading, clearActiveTimeline]
+ [dispatch, updateTimelineIsLoading, clearActiveTimeline]
);
const investigateInTimelineAlertClick = useCallback(async () => {
diff --git a/x-pack/plugins/security_solution/public/plugin.tsx b/x-pack/plugins/security_solution/public/plugin.tsx
index 0aa89c80e0a1..516dc0166bdd 100644
--- a/x-pack/plugins/security_solution/public/plugin.tsx
+++ b/x-pack/plugins/security_solution/public/plugin.tsx
@@ -17,8 +17,12 @@ import type {
Plugin as IPlugin,
} from '@kbn/core/public';
-import type { DataPublicPluginStart } from '@kbn/data-plugin/public';
-import { NowProvider, QueryService } from '@kbn/data-plugin/public';
+import {
+ type DataPublicPluginStart,
+ FilterManager,
+ NowProvider,
+ QueryService,
+} from '@kbn/data-plugin/public';
import { DEFAULT_APP_CATEGORIES } from '@kbn/core/public';
import { Storage } from '@kbn/kibana-utils-plugin/public';
import { getLazyEndpointAgentTamperProtectionExtension } from './management/pages/policy/view/ingest_manager_integration/lazy_endpoint_agent_tamper_protection_extension';
@@ -212,6 +216,7 @@ export class Plugin implements IPlugin {
- const {
- data: { query },
- } = useKibana().services;
const dispatch = useDispatch();
const { startTransaction } = useStartTransaction();
- const filterManagerBackup = useMemo(() => query.filterManager, [query.filterManager]);
- const getManageTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []);
- const { filterManager: activeFilterManager } = useDeepEqualSelector((state) =>
- getManageTimeline(state, TimelineId.active ?? '')
- );
- const filterManager = useMemo(
- () => activeFilterManager ?? filterManagerBackup,
- [activeFilterManager, filterManagerBackup]
- );
-
const updateTimelineIsLoading = useCallback(
(payload) => dispatch(timelineActions.updateIsLoading(payload)),
[dispatch]
@@ -85,7 +70,6 @@ export const useInvestigateInTimeline = ({
notes: [],
timeline: {
...timeline,
- filterManager,
indexNames: timeline.indexNames ?? [],
show: true,
},
@@ -93,12 +77,12 @@ export const useInvestigateInTimeline = ({
ruleNote,
})();
},
- [dispatch, filterManager, updateTimelineIsLoading, clearActiveTimeline]
+ [dispatch, updateTimelineIsLoading, clearActiveTimeline]
);
const investigateInTimelineClick = useCallback(async () => {
startTransaction({ name: `${APP_UI_ID} threat indicator investigateInTimeline` });
- await createTimeline({
+ createTimeline({
from,
notes: null,
timeline: {
diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/query_tab_content/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/query_tab_content/index.tsx
index 308ba6038ec5..40f883426420 100644
--- a/x-pack/plugins/security_solution/public/timelines/components/timeline/query_tab_content/index.tsx
+++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/query_tab_content/index.tsx
@@ -22,7 +22,6 @@ import { connect, useDispatch } from 'react-redux';
import deepEqual from 'fast-deep-equal';
import { InPortal } from 'react-reverse-portal';
-import { FilterManager } from '@kbn/data-plugin/public';
import { getEsQueryConfig } from '@kbn/data-plugin/common';
import type { ControlColumnProps } from '../../../../../common/types';
import { InputsModelId } from '../../../../common/store/inputs/constants';
@@ -44,7 +43,7 @@ import type {
RowRenderer,
ToggleDetailPanel,
} from '../../../../../common/types/timeline';
-import { TimelineId, TimelineTabs } from '../../../../../common/types/timeline';
+import { TimelineTabs } from '../../../../../common/types/timeline';
import { requiredFieldsForActions } from '../../../../detections/components/alerts_table/default_config';
import { EventDetailsWidthProvider } from '../../../../common/components/events_viewer/event_details_width_context';
import type { inputsModel, State } from '../../../../common/store';
@@ -58,7 +57,6 @@ import { useTimelineFullScreen } from '../../../../common/containers/use_full_sc
import { DetailsPanel } from '../../side_panel';
import { ExitFullScreen } from '../../../../common/components/exit_full_screen';
import { getDefaultControlColumn } from '../body/control_columns';
-import { useDeepEqualSelector } from '../../../../common/hooks/use_selector';
import { useLicense } from '../../../../common/hooks/use_license';
import { HeaderActions } from '../../../../common/components/header_actions/header_actions';
const QueryTabHeaderContainer = styled.div`
@@ -157,7 +155,6 @@ export const QueryTabContentComponent: React.FC = ({
columns,
dataProviders,
end,
- expandedDetail,
filters,
timelineId,
isLive,
@@ -191,21 +188,10 @@ export const QueryTabContentComponent: React.FC = ({
selectedPatterns,
} = useSourcererDataView(SourcererScopeName.timeline);
- const { uiSettings } = useKibana().services;
+ const { uiSettings, timelineFilterManager } = useKibana().services;
const isEnterprisePlus = useLicense().isEnterprise();
const ACTION_BUTTON_COUNT = isEnterprisePlus ? 6 : 5;
- const getManageTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []);
- const currentTimeline = useDeepEqualSelector((state) =>
- getManageTimeline(state, timelineId ?? TimelineId.active)
- );
-
- const activeFilterManager = currentTimeline.filterManager;
- const filterManager = useMemo(
- () => activeFilterManager ?? new FilterManager(uiSettings),
- [activeFilterManager, uiSettings]
- );
-
const esQueryConfig = useMemo(() => getEsQueryConfig(uiSettings), [uiSettings]);
const kqlQuery: {
query: string;
@@ -268,11 +254,10 @@ export const QueryTabContentComponent: React.FC = ({
useEffect(() => {
dispatch(
timelineActions.initializeTimelineSettings({
- filterManager,
id: timelineId,
})
);
- }, [dispatch, filterManager, timelineId]);
+ }, [dispatch, timelineId]);
const [
isQueryLoading,
@@ -353,7 +338,7 @@ export const QueryTabContentComponent: React.FC = ({
{
@@ -57,8 +56,6 @@ jest.mock('../../common/utils/default_date_settings', () => {
};
});
-const mockFilterManager = {} as FilterManager;
-
const basicDataProvider: DataProvider = {
and: [],
id: '123',
@@ -94,7 +91,6 @@ const basicTimeline: TimelineModel = {
eventIdToNoteIds: {},
excludedRowRendererIds: [],
expandedDetail: {},
- filterManager: mockFilterManager,
highlightedDropAndProviderId: '',
historyIds: [],
id: 'foo',
@@ -196,20 +192,6 @@ describe('Timeline', () => {
},
});
});
-
- test('should contain existing filterManager', () => {
- const update = addTimelineToStore({
- id: 'foo',
- timeline: {
- ...basicTimeline,
- status: TimelineStatus.immutable,
- timelineType: TimelineType.template,
- },
- timelineById: timelineByIdMock,
- });
-
- expect(update.foo.filterManager).toEqual(mockFilterManager);
- });
});
describe('#addNewTimeline', () => {
diff --git a/x-pack/plugins/security_solution/public/timelines/store/helpers.ts b/x-pack/plugins/security_solution/public/timelines/store/helpers.ts
index 5ce65a5b7091..93df6c2900e2 100644
--- a/x-pack/plugins/security_solution/public/timelines/store/helpers.ts
+++ b/x-pack/plugins/security_solution/public/timelines/store/helpers.ts
@@ -130,7 +130,6 @@ export const addTimelineToStore = ({
...timelineById,
[id]: {
...timeline,
- filterManager: timelineById[id].filterManager,
isLoading: timelineById[id].isLoading,
initialized: timeline.initialized ?? timelineById[id].initialized,
resolveTimelineConfig,
diff --git a/x-pack/plugins/security_solution/public/timelines/store/model.ts b/x-pack/plugins/security_solution/public/timelines/store/model.ts
index 0bd6f4806f06..89e1754acb28 100644
--- a/x-pack/plugins/security_solution/public/timelines/store/model.ts
+++ b/x-pack/plugins/security_solution/public/timelines/store/model.ts
@@ -5,7 +5,6 @@
* 2.0.
*/
-import type { FilterManager } from '@kbn/data-plugin/public';
import type { Filter } from '@kbn/es-query';
import type { SavedSearch } from '@kbn/saved-search-plugin/common';
import type { ExpandedDetailTimeline, SessionViewConfig } from '../../../common/types';
@@ -101,7 +100,7 @@ export interface TimelineModel {
deletedEventIds: string[];
documentType: string;
excludedRowRendererIds: RowRendererId[];
- filterManager?: FilterManager;
+ filters?: Filter[];
footerText?: string | React.ReactNode;
loadingText?: string | React.ReactNode;
queryFields: string[];
@@ -128,7 +127,6 @@ export interface TimelineModel {
};
/** Uniquely identifies the timeline */
id: string;
- filters?: Filter[];
selectedEventIds: Record;
/** If selectAll checkbox in header is checked **/
isSelectAllChecked: boolean;
@@ -194,7 +192,6 @@ export type SubsetTimelineModel = Readonly<
| 'version'
| 'status'
| 'filters'
- | 'filterManager'
| 'savedSearchId'
| 'savedSearch'
| 'isDiscoverSavedSearchLoaded'
diff --git a/x-pack/plugins/security_solution/public/timelines/store/types.ts b/x-pack/plugins/security_solution/public/timelines/store/types.ts
index ef31fd909725..31d2a6b6daf1 100644
--- a/x-pack/plugins/security_solution/public/timelines/store/types.ts
+++ b/x-pack/plugins/security_solution/public/timelines/store/types.ts
@@ -5,7 +5,6 @@
* 2.0.
*/
-import type { FilterManager } from '@kbn/data-plugin/public';
import type { ColumnHeaderOptions, SortColumnTimeline } from '../../../common/types';
import type { RowRendererId } from '../../../common/api/timeline';
@@ -37,7 +36,6 @@ export interface TimelineModelSettings {
defaultColumns: ColumnHeaderOptions[];
/** A list of Ids of excluded Row Renderers */
excludedRowRendererIds: RowRendererId[];
- filterManager?: FilterManager;
footerText?: string | React.ReactNode;
loadingText?: string | React.ReactNode;
queryFields: string[];
diff --git a/x-pack/plugins/security_solution/public/types.ts b/x-pack/plugins/security_solution/public/types.ts
index 3c76453acb38..16b7308aa73d 100644
--- a/x-pack/plugins/security_solution/public/types.ts
+++ b/x-pack/plugins/security_solution/public/types.ts
@@ -9,7 +9,7 @@ import type { Observable } from 'rxjs';
import type { CoreStart, AppMountParameters, AppLeaveHandler } from '@kbn/core/public';
import type { HomePublicPluginSetup } from '@kbn/home-plugin/public';
-import type { DataPublicPluginStart } from '@kbn/data-plugin/public';
+import type { DataPublicPluginStart, FilterManager } from '@kbn/data-plugin/public';
import type { FieldFormatsStartCommon } from '@kbn/field-formats-plugin/common';
import type { EmbeddableStart } from '@kbn/embeddable-plugin/public';
import type { LensPublicStart } from '@kbn/lens-plugin/public';
@@ -176,6 +176,7 @@ export type StartServices = CoreStart &
telemetry: TelemetryClientStart;
customDataService: DataPublicPluginStart;
topValuesPopover: TopValuesPopoverService;
+ timelineFilterManager: FilterManager;
};
export interface PluginSetup {
From 07a846464c4af3de8556419aa748ef2631db43ba Mon Sep 17 00:00:00 2001
From: Michael Dokolin
Date: Mon, 11 Mar 2024 16:45:06 +0100
Subject: [PATCH 016/100] [CLI] Add a signal handler to run CPU profiler
(#177477)
---
src/cli/cli.js | 2 +
src/cli/profiler/profiler.js | 87 +++++++++++++++++++
src/cli/tsconfig.json | 1 +
.../resources/base/bin/kibana-docker | 1 +
.../templates/base/Dockerfile | 1 +
5 files changed, 92 insertions(+)
create mode 100644 src/cli/profiler/profiler.js
diff --git a/src/cli/cli.js b/src/cli/cli.js
index f6bce6a8aefa..feb950ac5945 100644
--- a/src/cli/cli.js
+++ b/src/cli/cli.js
@@ -10,6 +10,7 @@ import _ from 'lodash';
import { kibanaPackageJson as pkg } from '@kbn/repo-info';
import Command from './command';
import serveCommand from './serve/serve';
+import profiler from './profiler/profiler';
const argv = process.argv.slice();
const program = new Command('bin/kibana');
@@ -23,6 +24,7 @@ program
// attach commands
serveCommand(program);
+profiler(program);
program
.command('help ')
diff --git a/src/cli/profiler/profiler.js b/src/cli/profiler/profiler.js
new file mode 100644
index 000000000000..d7a7f7c8def3
--- /dev/null
+++ b/src/cli/profiler/profiler.js
@@ -0,0 +1,87 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { writeFile } from 'fs';
+import getopts from 'getopts';
+import { join } from 'path';
+import { Session } from 'node:inspector';
+import { threadId } from 'node:worker_threads';
+import { promisify } from 'util';
+
+class Profiler {
+ #counter = 0;
+ #path;
+ #session;
+
+ constructor() {
+ const execOpts = getopts(process.execArgv);
+ const envOpts = getopts(process.env.NODE_OPTIONS ? process.env.NODE_OPTIONS.split(/\s+/) : []);
+ this.#path = execOpts['diagnostic-dir'] || envOpts['diagnostic-dir'] || process.cwd();
+ }
+
+ #getPath() {
+ const now = new Date();
+
+ const year = now.getFullYear();
+ const month = String(now.getMonth() + 1).padStart(2, '0');
+ const day = String(now.getDate()).padStart(2, '0');
+ const hours = String(now.getHours()).padStart(2, '0');
+ const minutes = String(now.getMinutes()).padStart(2, '0');
+ const seconds = String(now.getSeconds()).padStart(2, '0');
+
+ const date = `${year}${month}${day}`;
+ const time = `${hours}${minutes}${seconds}`;
+ const pid = process.pid;
+ const thread = threadId;
+ const serial = (++this.#counter).toString().padStart(3, '0');
+
+ return join(this.#path, `CPU.${date}.${time}.${pid}.${thread}.${serial}.cpuprofile`);
+ }
+
+ async #start() {
+ this.#session = new Session();
+ this.#session.connect();
+ this.#session.post = this.#session.post.bind(this.#session);
+
+ await promisify(this.#session.post)('Profiler.enable');
+ await promisify(this.#session.post)('Profiler.start');
+ }
+
+ async #stop() {
+ try {
+ const { profile } = await promisify(this.#session.post)('Profiler.stop');
+ const path = this.#getPath();
+ await promisify(writeFile)(path, JSON.stringify(profile));
+ } finally {
+ this.#session.disconnect();
+ this.#session = undefined;
+ }
+ }
+
+ isRunning() {
+ return this.#session !== undefined;
+ }
+
+ toggle() {
+ return this.isRunning() ? this.#stop() : this.#start();
+ }
+}
+
+export default function (program) {
+ program
+ .option('--profiler.signal ', 'Start/stop CPU profiling on ')
+ .on('option:profiler.signal', function (signal) {
+ if (!signal) {
+ return;
+ }
+
+ const profiler = new Profiler();
+ process.removeAllListeners(signal);
+ process.on(signal, profiler.toggle.bind(profiler));
+ });
+}
diff --git a/src/cli/tsconfig.json b/src/cli/tsconfig.json
index ebbbc19f75c7..29903572a685 100644
--- a/src/cli/tsconfig.json
+++ b/src/cli/tsconfig.json
@@ -5,6 +5,7 @@
},
"include": [
"keystore/**/*",
+ "profiler/**/*",
"serve/**/*",
"*.js",
],
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 0f554570f984..dd41a333d3ba 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
@@ -136,6 +136,7 @@ kibana_vars=(
ops.interval
path.data
pid.file
+ profiler.signal
regionmap
savedObjects.maxImportExportSize
savedObjects.maxImportPayloadBytes
diff --git a/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile b/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile
index d0bf01692ae8..1869086b51ab 100644
--- a/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile
+++ b/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile
@@ -160,6 +160,7 @@ COPY --chown=1000:0 config/serverless.security.yml /usr/share/kibana/config/serv
# Supportability enhancement: enable capturing heap snapshots. See https://nodejs.org/api/cli.html#--heapsnapshot-signalsignal
RUN /usr/bin/echo -e '\n--heapsnapshot-signal=SIGUSR2' >> config/node.options
RUN /usr/bin/echo '--diagnostic-dir=./data' >> config/node.options
+ENV PROFILER_SIGNAL=SIGUSR1
{{/serverless}}
{{^opensslLegacyProvider}}
RUN sed 's/\(--openssl-legacy-provider\)/#\1/' -i config/node.options
From e856741051791bb397cbdecf740a4b70fdbb9633 Mon Sep 17 00:00:00 2001
From: Jonathan Budzenski
Date: Mon, 11 Mar 2024 11:03:30 -0500
Subject: [PATCH 017/100] skip failing test suite (#174384)
---
.../registered_attachments_property_actions.test.tsx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx b/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx
index f0db59b3a682..a1f407a1c98c 100644
--- a/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx
+++ b/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx
@@ -18,7 +18,8 @@ import {
import { RegisteredAttachmentsPropertyActions } from './registered_attachments_property_actions';
import { AttachmentActionType } from '../../../client/attachment_framework/types';
-describe('RegisteredAttachmentsPropertyActions', () => {
+// Failing: See https://github.com/elastic/kibana/issues/174384
+describe.skip('RegisteredAttachmentsPropertyActions', () => {
let appMock: AppMockRenderer;
const props = {
From ab10cc2d1d36c2005e072aaa12979c4a08cc03e3 Mon Sep 17 00:00:00 2001
From: Alex Szabo
Date: Mon, 11 Mar 2024 17:46:15 +0100
Subject: [PATCH 018/100] [Ops] Prevent emergency-release image build on
commits already in main (#177736)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Summary
We'd like to prevent container builds when forked to a
`deploy-fix@` branch, on commits that are already contained
in `main` (thus already built into an image).
This happens when forking off, the branch is created with the commit
from `main`'s `HEAD`, the pipeline picks up the first commit, and fails
on building a container that already exists.
Solution:
- check if the current commit is in `(upstream|origin)/main` - if it is,
we don't need to emit the trigger step.
Tests:
- [x] Test trigger: in [this
build](https://buildkite.com/elastic/kibana-serverless-emergency-release-branch-testing/builds/12#_),
I accidentally inverted the DRY_RUN functionality, at least we know the
trigger works if needed.
- [x] Test with a supplied commit sha (this
[build](https://buildkite.com/elastic/kibana-serverless-emergency-release-branch-testing/builds/14#018dd6fe-2d3d-4430-adf2-e8dd50c8f79c))
Bonus:
- Fixes an emoji (in a different trigger step) that's nonexistent in
Buildkite, but we just copied it over from other labels 🤷 (from #176505
)
Closes: https://github.com/elastic/kibana-operations/issues/68
---
.../emergency_release_branch_testing.yml | 10 ++-
.../generate_gpctl_trigger.ts | 2 +-
.../trigger_container_build.ts | 64 +++++++++++++++++++
3 files changed, 69 insertions(+), 7 deletions(-)
create mode 100644 .buildkite/scripts/serverless/emergency_release/trigger_container_build.ts
diff --git a/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml b/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml
index 8fc5da666d56..1952900c1aab 100644
--- a/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml
+++ b/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml
@@ -9,9 +9,7 @@ notify:
if: "build.state == 'passed' || build.state == 'failed' || build.state == 'scheduled'"
steps:
- - trigger: "kibana-artifacts-container-image"
- label: ":docker: Build Kibana Artifacts Container Image"
- build:
- branch: $BUILDKITE_BRANCH
- commit: $BUILDKITE_COMMIT
- message: Running PR build for $BUILDKITE_BRANCH
+ - command: "ts-node .buildkite/scripts/serverless/emergency_release/trigger_container_build.ts"
+ label: "Trigger container build if there are new commits"
+ env:
+ DRY_RUN: $DRY_RUN
diff --git a/.buildkite/scripts/serverless/create_deploy_tag/generate_gpctl_trigger.ts b/.buildkite/scripts/serverless/create_deploy_tag/generate_gpctl_trigger.ts
index 8fa778fe8a67..231977979c41 100644
--- a/.buildkite/scripts/serverless/create_deploy_tag/generate_gpctl_trigger.ts
+++ b/.buildkite/scripts/serverless/create_deploy_tag/generate_gpctl_trigger.ts
@@ -20,7 +20,7 @@ async function main() {
function uploadTriggerStep(commitSha: string) {
const triggerStep: BuildkiteTriggerStep = {
- label: ':releasethekaken: Trigger GPCTL / Release Kibana',
+ label: ':ship: Trigger GPCTL / Release Kibana',
trigger: 'gpctl-promote',
async: true,
build: {
diff --git a/.buildkite/scripts/serverless/emergency_release/trigger_container_build.ts b/.buildkite/scripts/serverless/emergency_release/trigger_container_build.ts
new file mode 100644
index 000000000000..daf7c904ffd4
--- /dev/null
+++ b/.buildkite/scripts/serverless/emergency_release/trigger_container_build.ts
@@ -0,0 +1,64 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { execSync } from 'child_process';
+import { BuildkiteClient, BuildkiteTriggerStep } from '#pipeline-utils';
+
+const DRY_RUN = !!process.env.DRY_RUN?.match(/^(true|1)$/i);
+const buildkite = new BuildkiteClient();
+
+async function main() {
+ const commitSha = process.env.OVERRIDE_COMMIT || process.env.BUILDKITE_COMMIT;
+
+ if (!isCurrentHeadInMain(commitSha!)) {
+ if (!DRY_RUN) {
+ console.log(
+ `DRY_RUN: Commit ${commitSha} isn't in main, triggering container build :green_heart:`
+ );
+ } else {
+ console.log(`Commit ${commitSha} isn't in main, triggering container build :green_heart:`);
+ uploadTriggerBuildStep();
+ }
+ } else {
+ if (!DRY_RUN) {
+ console.log(`DRY_RUN: Commit ${commitSha} is in main, no build necessary :yellow_heart:`);
+ } else {
+ console.log(`Commit ${commitSha} is in main, no trigger necessary :yellow_heart:`);
+ }
+ }
+}
+
+function isCurrentHeadInMain(commitSha: string) {
+ const containmentTest = execSync(
+ `git branch -r --contains '${commitSha}' | grep -E "(upstream|origin)/main" | wc -l`
+ ).toString();
+
+ return parseInt(containmentTest, 10) >= 1;
+}
+
+function uploadTriggerBuildStep() {
+ const triggerStep: BuildkiteTriggerStep = {
+ label: ':point_right: Trigger emergency commit container build',
+ trigger: 'kibana-artifacts-container-image',
+ build: {
+ message: `Triggered by '${process.env.BUILDKITE_PIPELINE_NAME || 'unknown'}'`,
+ env: {},
+ },
+ };
+
+ buildkite.uploadSteps([triggerStep]);
+}
+
+main()
+ .then(() => {
+ console.log('Trigger container build step uploaded.');
+ })
+ .catch((error) => {
+ console.error(error);
+ process.exit(1);
+ });
From d7d2e843f50a4482531102c9cb4ba81acbf7885c Mon Sep 17 00:00:00 2001
From: Nathan Reese
Date: Mon, 11 Mar 2024 10:48:06 -0600
Subject: [PATCH 019/100] decouple anomaly job creation action from Embeddable
framework (#176869)
part of https://github.com/elastic/kibana/issues/175138
PR decouples `createMLADJobAction` action from Embeddable framework.
This means that instead of reading values from `embeddable.getInput()`,
values are read from presentation publishing interfaces. Existing
embeddables expose both `Embeddable` and `presentation publishing
interfaces` so they work with both. In the future, as embeddables get
refactored to the new embeddable system, then they will only expose
`presentation publishing interfaces`. Migrating away from old interfaces
so that refactoring embeddables can start.
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
.../external_api/dashboard_api.ts | 16 ++++-
.../plugins/lens/public/embeddable/index.ts | 2 +-
.../embeddable/interfaces/has_lens_config.ts | 19 ------
.../public/embeddable/interfaces/lens_api.ts | 38 ++++++++++++
x-pack/plugins/lens/public/index.ts | 4 +-
.../plugins/maps/public/embeddable/map_api.ts | 37 ++++++++++++
x-pack/plugins/maps/public/index.ts | 1 +
.../synchronize_movement/is_compatible.ts | 4 +-
.../synchronize_movement/types.ts | 4 +-
.../jobs/new_job/job_from_dashboard/index.ts | 2 +-
.../quick_create_job_base.ts | 42 +++++---------
.../jobs/new_job/job_from_lens/index.ts | 1 +
.../new_job/job_from_lens/quick_create_job.ts | 5 +-
.../jobs/new_job/job_from_lens/utils.ts | 35 ++++++-----
.../job_from_lens/visualization_extractor.ts | 7 +--
.../new_job/job_from_map/quick_create_job.ts | 9 ++-
.../jobs/new_job/job_from_map/utils.ts | 43 ++++++--------
.../job_from_map/visualization_extractor.ts | 14 +++--
.../job_creation/aiops/flyout/create_job.tsx | 1 -
.../job_creation/common/job_details.tsx | 7 ---
.../flyout.tsx | 8 +--
.../layer/compatible_layer.tsx | 19 ++----
.../layer/layer.tsx | 4 +-
.../job_creation/lens/show_flyout.tsx | 4 +-
.../embeddables/job_creation/map/flyout.tsx | 7 ++-
.../layer/compatible_layer.tsx | 17 ++----
.../layer/layer.tsx | 4 +-
.../job_creation/map/show_flyout.tsx | 5 +-
.../ui_actions/open_vis_in_ml_action.tsx | 58 +++++++++++--------
x-pack/plugins/ml/public/ui_actions/types.ts | 11 ++++
x-pack/plugins/ml/tsconfig.json | 1 +
31 files changed, 236 insertions(+), 193 deletions(-)
delete mode 100644 x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts
create mode 100644 x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts
create mode 100644 x-pack/plugins/maps/public/embeddable/map_api.ts
create mode 100644 x-pack/plugins/ml/public/ui_actions/types.ts
diff --git a/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts b/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts
index 42915c0aa397..ad9a32d31f86 100644
--- a/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts
+++ b/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts
@@ -8,12 +8,24 @@
import type { DataView } from '@kbn/data-views-plugin/public';
import { CanDuplicatePanels, CanExpandPanels, TracksOverlays } from '@kbn/presentation-containers';
-import { HasTypeDisplayName, PublishesSavedObjectId } from '@kbn/presentation-publishing';
+import {
+ HasType,
+ HasTypeDisplayName,
+ PublishesLocalUnifiedSearch,
+ PublishesPanelTitle,
+ PublishesSavedObjectId,
+} from '@kbn/presentation-publishing';
import { DashboardPanelState } from '../../../common';
import { DashboardContainer } from '../embeddable/dashboard_container';
// TODO lock down DashboardAPI
-export type DashboardAPI = DashboardContainer;
+export type DashboardAPI = DashboardContainer &
+ Partial<
+ HasType<'dashboard'> &
+ PublishesLocalUnifiedSearch &
+ PublishesPanelTitle &
+ PublishesSavedObjectId
+ >;
export type AwaitingDashboardAPI = DashboardAPI | null;
export const buildApiFromDashboardContainer = (container?: DashboardContainer) => container ?? null;
diff --git a/x-pack/plugins/lens/public/embeddable/index.ts b/x-pack/plugins/lens/public/embeddable/index.ts
index 37bd92c53a9a..50ee0f582a2f 100644
--- a/x-pack/plugins/lens/public/embeddable/index.ts
+++ b/x-pack/plugins/lens/public/embeddable/index.ts
@@ -7,4 +7,4 @@
export * from './embeddable';
-export { type HasLensConfig, apiHasLensConfig } from './interfaces/has_lens_config';
+export { type LensApi, isLensApi } from './interfaces/lens_api';
diff --git a/x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts b/x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts
deleted file mode 100644
index 9e3f9c4b026e..000000000000
--- a/x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { type HasType, apiIsOfType } from '@kbn/presentation-publishing';
-import { LensSavedObjectAttributes } from '../embeddable';
-
-export type HasLensConfig = HasType<'lens'> & {
- getSavedVis: () => Readonly;
-};
-
-export const apiHasLensConfig = (api: unknown): api is HasLensConfig => {
- return Boolean(
- api && apiIsOfType(api, 'lens') && typeof (api as HasLensConfig).getSavedVis === 'function'
- );
-};
diff --git a/x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts b/x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts
new file mode 100644
index 000000000000..32e1ac52085a
--- /dev/null
+++ b/x-pack/plugins/lens/public/embeddable/interfaces/lens_api.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 type {
+ HasParentApi,
+ HasType,
+ PublishesLocalUnifiedSearch,
+ PublishesPanelTitle,
+} from '@kbn/presentation-publishing';
+import {
+ apiIsOfType,
+ apiPublishesLocalUnifiedSearch,
+ apiPublishesPanelTitle,
+} from '@kbn/presentation-publishing';
+import { LensSavedObjectAttributes } from '../embeddable';
+
+export type HasLensConfig = HasType<'lens'> & {
+ getSavedVis: () => Readonly;
+};
+
+export type LensApi = HasLensConfig &
+ PublishesPanelTitle &
+ PublishesLocalUnifiedSearch &
+ Partial>;
+
+export const isLensApi = (api: unknown): api is LensApi => {
+ return Boolean(
+ api &&
+ apiIsOfType(api, 'lens') &&
+ typeof (api as HasLensConfig).getSavedVis === 'function' &&
+ apiPublishesPanelTitle(api) &&
+ apiPublishesLocalUnifiedSearch(api)
+ );
+};
diff --git a/x-pack/plugins/lens/public/index.ts b/x-pack/plugins/lens/public/index.ts
index 2bf09422986e..0088e434cb72 100644
--- a/x-pack/plugins/lens/public/index.ts
+++ b/x-pack/plugins/lens/public/index.ts
@@ -7,7 +7,7 @@
import { LensPlugin } from './plugin';
-export { apiHasLensConfig } from './embeddable/interfaces/has_lens_config';
+export { isLensApi } from './embeddable/interfaces/lens_api';
export type {
EmbeddableComponentProps,
EmbeddableComponent,
@@ -110,7 +110,7 @@ export type {
export type { InlineEditLensEmbeddableContext } from './trigger_actions/open_lens_config/in_app_embeddable_edit/types';
export type {
- HasLensConfig,
+ LensApi,
LensEmbeddableInput,
LensSavedObjectAttributes,
Embeddable,
diff --git a/x-pack/plugins/maps/public/embeddable/map_api.ts b/x-pack/plugins/maps/public/embeddable/map_api.ts
new file mode 100644
index 000000000000..171816289a8a
--- /dev/null
+++ b/x-pack/plugins/maps/public/embeddable/map_api.ts
@@ -0,0 +1,37 @@
+/*
+ * 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 {
+ HasParentApi,
+ HasType,
+ PublishesDataViews,
+ PublishesPanelTitle,
+ PublishesLocalUnifiedSearch,
+} from '@kbn/presentation-publishing';
+import {
+ apiIsOfType,
+ apiPublishesLocalUnifiedSearch,
+ apiPublishesPanelTitle,
+} from '@kbn/presentation-publishing';
+import type { ILayer } from '../classes/layers/layer';
+
+export type MapApi = HasType<'map'> & {
+ getLayerList: () => ILayer[];
+} & PublishesDataViews &
+ PublishesPanelTitle &
+ PublishesLocalUnifiedSearch &
+ Partial>;
+
+export const isMapApi = (api: unknown): api is MapApi => {
+ return Boolean(
+ api &&
+ apiIsOfType(api, 'map') &&
+ typeof (api as MapApi).getLayerList === 'function' &&
+ apiPublishesPanelTitle(api) &&
+ apiPublishesLocalUnifiedSearch(api)
+ );
+};
diff --git a/x-pack/plugins/maps/public/index.ts b/x-pack/plugins/maps/public/index.ts
index 72806e7579dc..d0281537e7a0 100644
--- a/x-pack/plugins/maps/public/index.ts
+++ b/x-pack/plugins/maps/public/index.ts
@@ -28,6 +28,7 @@ export type {
export type { MapsSetupApi, MapsStartApi } from './api';
export type { MapEmbeddable, MapEmbeddableInput, MapEmbeddableOutput } from './embeddable';
+export { type MapApi, isMapApi } from './embeddable/map_api';
export type { EMSTermJoinConfig, SampleValuesConfig } from './ems_autosuggest';
diff --git a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/is_compatible.ts b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/is_compatible.ts
index bd31feb04f00..520ed2e1cc92 100644
--- a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/is_compatible.ts
+++ b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/is_compatible.ts
@@ -7,7 +7,7 @@
import { apiIsOfType } from '@kbn/presentation-publishing';
import { apiHasVisualizeConfig } from '@kbn/visualizations-plugin/public';
-import { apiHasLensConfig } from '@kbn/lens-plugin/public';
+import { isLensApi } from '@kbn/lens-plugin/public';
import { MAP_SAVED_OBJECT_TYPE } from '../../../common/constants';
import { isLegacyMapApi } from '../../legacy_visualizations/is_legacy_map';
import { mapEmbeddablesSingleton } from '../../embeddable/map_embeddables_singleton';
@@ -19,7 +19,7 @@ export function isCompatible(api: SynchronizeMovementActionApi) {
}
return (
apiIsOfType(api, MAP_SAVED_OBJECT_TYPE) ||
- (apiHasLensConfig(api) && api.getSavedVis()?.visualizationType === 'lnsChoropleth') ||
+ (isLensApi(api) && api.getSavedVis()?.visualizationType === 'lnsChoropleth') ||
(apiHasVisualizeConfig(api) && isLegacyMapApi(api))
);
}
diff --git a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/types.ts b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/types.ts
index 4b9e48e19c2d..f171e39a2ad2 100644
--- a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/types.ts
+++ b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/types.ts
@@ -6,9 +6,9 @@
*/
import type { HasType } from '@kbn/presentation-publishing';
-import type { HasLensConfig } from '@kbn/lens-plugin/public';
+import type { LensApi } from '@kbn/lens-plugin/public';
import type { HasVisualizeConfig } from '@kbn/visualizations-plugin/public';
export type SynchronizeMovementActionApi =
| HasType<'map' | 'visualization' | 'lens'>
- | Partial;
+ | Partial;
diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/index.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/index.ts
index 37e7eb83d572..60fa45bfae44 100644
--- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/index.ts
+++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/index.ts
@@ -5,5 +5,5 @@
* 2.0.
*/
-export { QuickJobCreatorBase, isLensEmbeddable, isMapEmbeddable } from './quick_create_job_base';
+export { QuickJobCreatorBase } from './quick_create_job_base';
export type { CreateState } from './quick_create_job_base';
diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts
index f3b986d35277..d6bfc450a4cf 100644
--- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts
+++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts
@@ -11,11 +11,14 @@ import type { IUiSettingsClient } from '@kbn/core/public';
import type { TimefilterContract } from '@kbn/data-plugin/public';
import { firstValueFrom } from 'rxjs';
import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
-import type { DashboardLocatorParams, DashboardStart } from '@kbn/dashboard-plugin/public';
+import type {
+ DashboardAPI,
+ DashboardLocatorParams,
+ DashboardStart,
+} from '@kbn/dashboard-plugin/public';
+import { getPanelTitle } from '@kbn/presentation-publishing';
import type { Filter, Query, DataViewBase } from '@kbn/es-query';
import { FilterStateStore } from '@kbn/es-query';
-import type { Embeddable } from '@kbn/lens-plugin/public';
-import type { MapEmbeddable } from '@kbn/maps-plugin/public';
import type { ErrorType } from '@kbn/ml-error-utils';
import type { DataViewsContract } from '@kbn/data-views-plugin/public';
import type { MlApiServices } from '../../../services/ml_api_service';
@@ -25,16 +28,6 @@ import type { CREATED_BY_LABEL } from '../../../../../common/constants/new_job';
import { createQueries } from '../utils/new_job_utils';
import { createDatafeedId } from '../../../../../common/util/job_utils';
-export function isLensEmbeddable(arg: any): arg is Embeddable {
- return arg.hasOwnProperty('type') && arg.type === 'lens';
-}
-
-export function isMapEmbeddable(arg: any): arg is MapEmbeddable {
- return arg.hasOwnProperty('type') && arg.type === 'map';
-}
-
-export type Dashboard = Embeddable['parent'];
-
interface CreationState {
success: boolean;
error?: ErrorType;
@@ -85,7 +78,7 @@ export class QuickJobCreatorBase {
end: number | undefined;
startJob: boolean;
runInRealTime: boolean;
- dashboard?: Dashboard;
+ dashboard?: DashboardAPI;
}) {
const datafeedId = createDatafeedId(jobId);
const datafeed = { ...datafeedConfig, job_id: jobId, datafeed_id: datafeedId };
@@ -232,23 +225,14 @@ export class QuickJobCreatorBase {
return mergedQueries;
}
- private async createDashboardLink(dashboard: Dashboard, datafeedConfig: estypes.MlDatafeed) {
- const dashboardTitle = dashboard?.getTitle();
- if (dashboardTitle === undefined || dashboardTitle === '') {
- // embeddable may have not been in a dashboard
- // and my not have been given a title as it is unsaved.
- return null;
- }
-
- const findDashboardsService = await this.dashboardService.findDashboardsService();
- // find the dashboard from the dashboard service as the dashboard passed in may not have the correct id
- const foundDashboard = await findDashboardsService.findByTitle(dashboardTitle);
- if (foundDashboard === undefined) {
+ private async createDashboardLink(dashboard: DashboardAPI, datafeedConfig: estypes.MlDatafeed) {
+ const savedObjectId = dashboard.savedObjectId?.value;
+ if (!savedObjectId) {
return null;
}
const params: DashboardLocatorParams = {
- dashboardId: foundDashboard.id,
+ dashboardId: savedObjectId,
timeRange: {
from: '$earliest$',
to: '$latest$',
@@ -270,13 +254,13 @@ export class QuickJobCreatorBase {
const url = `${location.app}${location.path}`;
const urlName = i18n.translate('xpack.ml.newJob.fromLens.createJob.namedUrlDashboard', {
defaultMessage: 'Open {dashboardTitle}',
- values: { dashboardTitle },
+ values: { dashboardTitle: getPanelTitle(dashboard) ?? 'dashboard' },
});
return { url_name: urlName, url_value: url, time_range: 'auto' };
}
- private async getCustomUrls(dashboard: Dashboard, datafeedConfig: estypes.MlDatafeed) {
+ private async getCustomUrls(dashboard: DashboardAPI, datafeedConfig: estypes.MlDatafeed) {
const customUrls = await this.createDashboardLink(dashboard, datafeedConfig);
return dashboard !== undefined && customUrls !== null ? { custom_urls: [customUrls] } : {};
}
diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/index.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/index.ts
index 25f4fc16c7f2..ccb24599a9c7 100644
--- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/index.ts
+++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/index.ts
@@ -13,4 +13,5 @@ export {
getJobsItemsFromEmbeddable,
isCompatibleVisualizationType,
redirectToADJobWizards,
+ getChartInfoFromVisualization,
} from './utils';
diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/quick_create_job.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/quick_create_job.ts
index 0860f8c9f4d8..88ad820c059f 100644
--- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/quick_create_job.ts
+++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/quick_create_job.ts
@@ -8,7 +8,6 @@
import { i18n } from '@kbn/i18n';
import type {
ChartInfo,
- Embeddable,
LensPublicStart,
LensSavedObjectAttributes,
} from '@kbn/lens-plugin/public';
@@ -17,7 +16,7 @@ import type { TimefilterContract } from '@kbn/data-plugin/public';
import type { DataViewsContract } from '@kbn/data-views-plugin/public';
import type { Filter, Query } from '@kbn/es-query';
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
-
+import type { LensApi } from '@kbn/lens-plugin/public';
import type { JobCreatorType } from '../common/job_creator';
import { createEmptyJob, createEmptyDatafeed } from '../common/job_creator/util/default_configs';
import { stashJobForCloning } from '../common/job_creator/util/general';
@@ -51,7 +50,7 @@ export class QuickLensJobCreator extends QuickJobCreatorBase {
public async createAndSaveJob(
jobId: string,
bucketSpan: string,
- embeddable: Embeddable,
+ embeddable: LensApi,
startJob: boolean,
runInRealTime: boolean,
layerIndex: number
diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/utils.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/utils.ts
index 88e66aab9193..e8d6d890a0a0 100644
--- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/utils.ts
+++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/utils.ts
@@ -7,18 +7,20 @@
import { i18n } from '@kbn/i18n';
import type {
- Embeddable,
LensPublicStart,
DataType,
ChartInfo,
LensSavedObjectAttributes,
} from '@kbn/lens-plugin/public';
+import type { Query } from '@kbn/es-query';
+import { apiIsOfType } from '@kbn/presentation-publishing';
import type { SerializableRecord } from '@kbn/utility-types';
import type { SharePluginStart } from '@kbn/share-plugin/public';
import { layerTypes } from '@kbn/lens-plugin/public';
import { KBN_FIELD_TYPES } from '@kbn/field-types';
import { ML_JOB_AGGREGATION } from '@kbn/ml-anomaly-utils';
-
+import type { LensApi } from '@kbn/lens-plugin/public';
+import type { DashboardAPI } from '@kbn/dashboard-plugin/public';
import { ML_PAGES, ML_APP_LOCATOR } from '../../../../../common/constants/locator';
export const COMPATIBLE_SERIES_TYPES = [
@@ -43,7 +45,7 @@ export const COMPATIBLE_SPLIT_FIELD_TYPES: DataType[] = [
];
export async function redirectToADJobWizards(
- embeddable: Embeddable,
+ embeddable: LensApi,
layerIndex: number,
share: SharePluginStart,
lens: LensPublicStart
@@ -66,7 +68,7 @@ export async function redirectToADJobWizards(
window.open(url, '_blank');
}
-export async function getJobsItemsFromEmbeddable(embeddable: Embeddable, lens?: LensPublicStart) {
+export async function getJobsItemsFromEmbeddable(embeddable: LensApi, lens?: LensPublicStart) {
if (!lens) {
throw Error(
i18n.translate('xpack.ml.newJob.fromLens.createJob.error.lensNotFound', {
@@ -75,9 +77,11 @@ export async function getJobsItemsFromEmbeddable(embeddable: Embeddable, lens?:
);
}
- const { filters, timeRange, ...input } = embeddable.getInput();
- const query = input.query === undefined ? { query: '', language: 'kuery' } : input.query;
+ const dashboardApi = apiIsOfType(embeddable.parentApi, 'dashboard')
+ ? (embeddable.parentApi as DashboardAPI)
+ : undefined;
+ const timeRange = embeddable.localTimeRange?.value ?? dashboardApi?.localTimeRange?.value;
if (timeRange === undefined) {
throw Error(
i18n.translate('xpack.ml.newJob.fromLens.createJob.error.noTimeRange', {
@@ -85,8 +89,6 @@ export async function getJobsItemsFromEmbeddable(embeddable: Embeddable, lens?:
})
);
}
- const { to, from } = timeRange;
-
const vis = embeddable.getSavedVis();
if (vis === undefined) {
@@ -97,17 +99,14 @@ export async function getJobsItemsFromEmbeddable(embeddable: Embeddable, lens?:
);
}
- const chartInfo = await getChartInfoFromVisualization(lens, vis);
- const dashboard = embeddable.parent?.type === 'dashboard' ? embeddable.parent : undefined;
-
return {
vis,
- chartInfo,
- from,
- to,
- query,
- filters,
- dashboard,
+ chartInfo: await getChartInfoFromVisualization(lens, vis),
+ from: timeRange.from,
+ to: timeRange.to,
+ query: (dashboardApi?.localQuery?.value as Query) ?? { query: '', language: 'kuery' },
+ filters: dashboardApi?.localFilters?.value ?? [],
+ dashboard: dashboardApi,
};
}
@@ -238,7 +237,7 @@ export function createDetectors(
export async function getChartInfoFromVisualization(
lens: LensPublicStart,
vis: LensSavedObjectAttributes
-) {
+): Promise {
const chartInfo = await (await (await lens.stateHelperApi()).chartInfo).getChartInfo(vis);
if (!chartInfo) {
throw new Error('Cannot create job, chart info is undefined');
diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/visualization_extractor.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/visualization_extractor.ts
index 4552123184f5..3883558d7652 100644
--- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/visualization_extractor.ts
+++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/visualization_extractor.ts
@@ -5,12 +5,11 @@
* 2.0.
*/
-import type { Embeddable, LensPublicStart, ChartInfo } from '@kbn/lens-plugin/public';
+import type { LensPublicStart, ChartInfo } from '@kbn/lens-plugin/public';
import { layerTypes } from '@kbn/lens-plugin/public';
-
import { i18n } from '@kbn/i18n';
-
import type { ErrorType } from '@kbn/ml-error-utils';
+import type { LensApi } from '@kbn/lens-plugin/public';
import { JOB_TYPE } from '../../../../../common/constants/new_job';
import {
getVisTypeFactory,
@@ -39,7 +38,7 @@ export class VisualizationExtractor {
constructor() {}
public async getResultLayersFromEmbeddable(
- embeddable: Embeddable,
+ embeddable: LensApi,
lens: LensPublicStart
): Promise {
const { chartInfo } = await getJobsItemsFromEmbeddable(embeddable, lens);
diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/quick_create_job.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/quick_create_job.ts
index dae30d13b877..cf4d4a35545a 100644
--- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/quick_create_job.ts
+++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/quick_create_job.ts
@@ -6,13 +6,12 @@
*/
import { i18n } from '@kbn/i18n';
-import type { MapEmbeddable } from '@kbn/maps-plugin/public';
import type { IUiSettingsClient } from '@kbn/core/public';
import type { TimefilterContract } from '@kbn/data-plugin/public';
import type { Filter, Query } from '@kbn/es-query';
import type { DataView, DataViewsContract } from '@kbn/data-views-plugin/public';
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
-
+import type { MapApi } from '@kbn/maps-plugin/public';
import type { MlApiServices } from '../../../services/ml_api_service';
import {
CREATED_BY_LABEL,
@@ -63,7 +62,7 @@ export class QuickGeoJobCreator extends QuickJobCreatorBase {
}: {
jobId: string;
bucketSpan: string;
- embeddable: MapEmbeddable;
+ embeddable: MapApi;
startJob: boolean;
runInRealTime: boolean;
dataViewId?: string;
@@ -81,8 +80,8 @@ export class QuickGeoJobCreator extends QuickJobCreatorBase {
} = await getJobsItemsFromEmbeddable(embeddable);
// Map level stuff
- const embeddableQuery = (await embeddable.getQuery()) ?? getDefaultQuery();
- const embeddableFilters = (await embeddable.getFilters()) ?? [];
+ const embeddableQuery = (embeddable.localQuery?.value as Query) ?? getDefaultQuery();
+ const embeddableFilters = embeddable.localFilters?.value ?? [];
if (dashboardQuery === undefined || dashboardFilters === undefined) {
throw new Error('Cannot create job, query and filters are undefined');
diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/utils.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/utils.ts
index 5a3985aa0dc3..5fe0c3bc0846 100644
--- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/utils.ts
+++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/utils.ts
@@ -7,12 +7,14 @@
import { i18n } from '@kbn/i18n';
import type { Query } from '@kbn/es-query';
-import type { MapEmbeddable } from '@kbn/maps-plugin/public';
+import { apiIsOfType } from '@kbn/presentation-publishing';
import type { SharePluginStart } from '@kbn/share-plugin/public';
+import type { MapApi } from '@kbn/maps-plugin/public';
+import type { DashboardAPI } from '@kbn/dashboard-plugin/public';
import { ML_PAGES, ML_APP_LOCATOR } from '../../../../../common/constants/locator';
export async function redirectToGeoJobWizard(
- embeddable: MapEmbeddable,
+ embeddable: MapApi,
dataViewId: string,
geoField: string,
layerQuery: Query | null,
@@ -20,8 +22,8 @@ export async function redirectToGeoJobWizard(
share: SharePluginStart
) {
const { query, filters, to, from } = await getJobsItemsFromEmbeddable(embeddable);
- const embeddableQuery = await embeddable.getQuery();
- const embeddableFilters = await embeddable.getFilters();
+ const embeddableQuery = embeddable.localQuery?.value;
+ const embeddableFilters = embeddable.localFilters?.value ?? [];
const locator = share.url.locators.get(ML_APP_LOCATOR);
const pageState = {
@@ -43,21 +45,17 @@ export async function redirectToGeoJobWizard(
window.open(url, '_blank');
}
-export function isCompatibleMapVisualization(embeddable: MapEmbeddable) {
- return embeddable.getLayerList().some((layer) => {
- const geoField = layer.getGeoFieldNames().length ? layer.getGeoFieldNames()[0] : undefined;
- const dataViewId = layer.getIndexPatternIds().length
- ? layer.getIndexPatternIds()[0]
- : undefined;
- return geoField && dataViewId;
+export function isCompatibleMapVisualization(api: MapApi) {
+ return api.getLayerList().some((layer) => {
+ return layer.getGeoFieldNames().length && layer.getIndexPatternIds().length;
});
}
-export async function getJobsItemsFromEmbeddable(embeddable: MapEmbeddable) {
- // Get dashboard level query/filters
- const { filters, timeRange, ...input } = embeddable.getInput();
- const query = input.query === undefined ? { query: '', language: 'kuery' } : input.query;
-
+export async function getJobsItemsFromEmbeddable(embeddable: MapApi) {
+ const dashboardApi = apiIsOfType(embeddable.parentApi, 'dashboard')
+ ? (embeddable.parentApi as DashboardAPI)
+ : undefined;
+ const timeRange = embeddable.localTimeRange?.value ?? dashboardApi?.localTimeRange?.value;
if (timeRange === undefined) {
throw Error(
i18n.translate('xpack.ml.newJob.fromGeo.createJob.error.noTimeRange', {
@@ -65,14 +63,11 @@ export async function getJobsItemsFromEmbeddable(embeddable: MapEmbeddable) {
})
);
}
- const { to, from } = timeRange;
- const dashboard = embeddable.parent?.type === 'dashboard' ? embeddable.parent : undefined;
-
return {
- from,
- to,
- query,
- filters,
- dashboard,
+ from: timeRange.from,
+ to: timeRange.to,
+ query: (dashboardApi?.localQuery?.value as Query) ?? { query: '', language: 'kuery' },
+ filters: dashboardApi?.localFilters?.value ?? [],
+ dashboard: dashboardApi,
};
}
diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts
index 26972a454ff8..ab319fab9f34 100644
--- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts
+++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts
@@ -6,11 +6,11 @@
*/
import { asyncForEach } from '@kbn/std';
-import type { MapEmbeddable } from '@kbn/maps-plugin/public';
+import type { PublishesDataViews } from '@kbn/presentation-publishing';
+import { type MapApi } from '@kbn/maps-plugin/public';
import type { EuiComboBoxOptionOption } from '@elastic/eui';
import type { DataView } from '@kbn/data-views-plugin/common';
import type { Query } from '@kbn/es-query';
-import type { DashboardAPI } from '@kbn/dashboard-plugin/public';
import { categoryFieldTypes } from '../../../../../common/util/fields_utils';
export interface LayerResult {
@@ -26,9 +26,11 @@ export interface LayerResult {
export class VisualizationExtractor {
constructor() {}
- public async getResultLayersFromEmbeddable(embeddable: MapEmbeddable): Promise {
+ public async getResultLayersFromEmbeddable(
+ embeddable: MapApi & Partial
+ ): Promise {
const layers: LayerResult[] = [];
- const dataViews: DataView[] = (embeddable.getRoot() as DashboardAPI)?.getAllDataViews() ?? [];
+ const dataViews: DataView[] = embeddable.dataViews?.value ?? [];
// Keep track of geoFields for layers as they can be repeated
const layerGeoFields: Record = {};
@@ -39,8 +41,8 @@ export class VisualizationExtractor {
? layer.getIndexPatternIds()[0]
: undefined;
const layerDisplayName = await layer.getDisplayName();
- const layerId = await layer.getId();
- const query = await layer.getQuery();
+ const layerId = layer.getId();
+ const query = layer.getQuery();
if (geoField && dataViewId && layerGeoFields[geoField] === undefined) {
layerGeoFields[geoField] = true;
diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/aiops/flyout/create_job.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/aiops/flyout/create_job.tsx
index 7a440794092b..df5048d7261a 100644
--- a/x-pack/plugins/ml/public/embeddables/job_creation/aiops/flyout/create_job.tsx
+++ b/x-pack/plugins/ml/public/embeddables/job_creation/aiops/flyout/create_job.tsx
@@ -147,7 +147,6 @@ export const CreateJob: FC = ({ dataView, field, query, timeRange }) => {
Promise;
layer?: LayerResult;
layerIndex: number;
- embeddable: Embeddable | MapEmbeddable | undefined;
timeRange: TimeRange | undefined;
incomingCreateError?: { text: string; errorText: string };
outerFormComplete?: boolean;
@@ -78,7 +73,6 @@ export const JobDetails: FC = ({
createADJob,
layer,
layerIndex,
- embeddable,
timeRange,
incomingCreateError,
outerFormComplete,
@@ -112,7 +106,6 @@ export const JobDetails: FC = ({
const result = await createADJob({
jobId,
bucketSpan,
- embeddable,
startJob,
runInRealTime,
});
diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx
index e9705b85278f..8e0b4178b5a1 100644
--- a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx
+++ b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx
@@ -7,7 +7,6 @@
import type { FC } from 'react';
import React, { useState, useEffect } from 'react';
-import type { Embeddable } from '@kbn/lens-plugin/public';
import { FormattedMessage } from '@kbn/i18n-react';
import {
EuiFlyoutFooter,
@@ -20,14 +19,15 @@ import {
EuiSpacer,
EuiText,
} from '@elastic/eui';
-
+import { getPanelTitle } from '@kbn/presentation-publishing';
+import type { LensApi } from '@kbn/lens-plugin/public';
import { Layer } from './layer';
import type { LayerResult } from '../../../../application/jobs/new_job/job_from_lens';
import { VisualizationExtractor } from '../../../../application/jobs/new_job/job_from_lens';
import { useMlFromLensKibanaContext } from '../../common/context';
interface Props {
- embeddable: Embeddable;
+ embeddable: LensApi;
onClose: () => void;
}
@@ -67,7 +67,7 @@ export const LensLayerSelectionFlyout: FC = ({ onClose, embeddable }) =>
diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/compatible_layer.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/compatible_layer.tsx
index 041abd7aaab5..3c9eefd47370 100644
--- a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/compatible_layer.tsx
+++ b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/compatible_layer.tsx
@@ -8,10 +8,8 @@
import type { FC } from 'react';
import React, { useMemo } from 'react'; // useCallback
import { FormattedMessage } from '@kbn/i18n-react';
-import type { Embeddable } from '@kbn/lens-plugin/public';
-
import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiText } from '@elastic/eui';
-
+import type { LensApi } from '@kbn/lens-plugin/public';
import {
redirectToADJobWizards,
QuickLensJobCreator,
@@ -25,7 +23,7 @@ import { JobDetails } from '../../../common/job_details';
interface Props {
layer: LayerResult;
layerIndex: number;
- embeddable: Embeddable;
+ embeddable: LensApi;
}
export const CompatibleLayer: FC = ({ layer, layerIndex, embeddable }) => {
@@ -58,17 +56,11 @@ export const CompatibleLayer: FC = ({ layer, layerIndex, embeddable }) =>
redirectToADJobWizards(embeddable, layerIndex, share, lens);
}
- async function createADJob({
- jobId,
- bucketSpan,
- embeddable: lensEmbeddable,
- startJob,
- runInRealTime,
- }: CreateADJobParams) {
+ async function createADJob({ jobId, bucketSpan, startJob, runInRealTime }: CreateADJobParams) {
const result = await quickJobCreator.createAndSaveJob(
jobId,
bucketSpan,
- lensEmbeddable as Embeddable,
+ embeddable,
startJob,
runInRealTime,
layerIndex
@@ -81,8 +73,7 @@ export const CompatibleLayer: FC = ({ layer, layerIndex, embeddable }) =>
diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/layer.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/layer.tsx
index 073a38383f74..03f862e7bf67 100644
--- a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/layer.tsx
+++ b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/layer.tsx
@@ -7,7 +7,6 @@
import type { FC } from 'react';
import React from 'react';
-import type { Embeddable } from '@kbn/lens-plugin/public';
import {
EuiFlexGroup,
EuiFlexItem,
@@ -17,6 +16,7 @@ import {
EuiSplitPanel,
EuiHorizontalRule,
} from '@elastic/eui';
+import type { LensApi } from '@kbn/lens-plugin/public';
import type { LayerResult } from '../../../../../application/jobs/new_job/job_from_lens';
import { CompatibleLayer } from './compatible_layer';
import { IncompatibleLayer } from './incompatible_layer';
@@ -24,7 +24,7 @@ import { IncompatibleLayer } from './incompatible_layer';
interface Props {
layer: LayerResult;
layerIndex: number;
- embeddable: Embeddable;
+ embeddable: LensApi;
}
export const Layer: FC = ({ layer, layerIndex, embeddable }) => {
diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/lens/show_flyout.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/lens/show_flyout.tsx
index 4a0f87c48a08..949d0a318331 100644
--- a/x-pack/plugins/ml/public/embeddables/job_creation/lens/show_flyout.tsx
+++ b/x-pack/plugins/ml/public/embeddables/job_creation/lens/show_flyout.tsx
@@ -7,17 +7,17 @@
import type { FC } from 'react';
import React from 'react';
-import type { Embeddable } from '@kbn/lens-plugin/public';
import type { CoreStart } from '@kbn/core/public';
import type { SharePluginStart } from '@kbn/share-plugin/public';
import type { DataPublicPluginStart } from '@kbn/data-plugin/public';
import type { LensPublicStart } from '@kbn/lens-plugin/public';
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
+import type { LensApi } from '@kbn/lens-plugin/public';
import { createFlyout, type FlyoutComponentProps } from '../common/create_flyout';
import { LensLayerSelectionFlyout } from './lens_vis_layer_selection_flyout';
export async function showLensVisToADJobFlyout(
- embeddable: Embeddable,
+ embeddable: LensApi,
coreStart: CoreStart,
share: SharePluginStart,
data: DataPublicPluginStart,
diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/map/flyout.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/map/flyout.tsx
index 80e43a0f682b..a10ed011f7e8 100644
--- a/x-pack/plugins/ml/public/embeddables/job_creation/map/flyout.tsx
+++ b/x-pack/plugins/ml/public/embeddables/job_creation/map/flyout.tsx
@@ -7,7 +7,6 @@
import type { FC } from 'react';
import React, { useEffect, useState } from 'react';
-import type { MapEmbeddable } from '@kbn/maps-plugin/public';
import { FormattedMessage } from '@kbn/i18n-react';
import {
EuiFlyoutFooter,
@@ -21,12 +20,14 @@ import {
EuiTitle,
useEuiTheme,
} from '@elastic/eui';
+import { getPanelTitle } from '@kbn/presentation-publishing';
+import type { MapApi } from '@kbn/maps-plugin/public';
import { Layer } from './map_vis_layer_selection_flyout/layer';
import type { LayerResult } from '../../../application/jobs/new_job/job_from_map';
import { VisualizationExtractor } from '../../../application/jobs/new_job/job_from_map';
interface Props {
- embeddable: MapEmbeddable;
+ embeddable: MapApi;
onClose: () => void;
}
@@ -62,7 +63,7 @@ export const GeoJobFlyout: FC = ({ onClose, embeddable }) => {
diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/compatible_layer.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/compatible_layer.tsx
index ba7216e80252..c5b8c69e72be 100644
--- a/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/compatible_layer.tsx
+++ b/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/compatible_layer.tsx
@@ -20,7 +20,7 @@ import {
EuiText,
} from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
-import type { MapEmbeddable } from '@kbn/maps-plugin/public';
+import type { MapApi } from '@kbn/maps-plugin/public';
import {
type LayerResult,
QuickGeoJobCreator,
@@ -36,7 +36,7 @@ interface DropDownLabel {
}
interface Props {
- embeddable: MapEmbeddable;
+ embeddable: MapApi;
layer: LayerResult;
layerIndex: number;
}
@@ -81,18 +81,12 @@ export const CompatibleLayer: FC = ({ embeddable, layer, layerIndex }) =>
}, [layer?.dataView?.id, embeddable, selectedSplitField]);
const createGeoJob = useCallback(
- async ({
- jobId,
- bucketSpan,
- embeddable: mapEmbeddable,
- startJob,
- runInRealTime,
- }: CreateADJobParams) => {
+ async ({ jobId, bucketSpan, startJob, runInRealTime }: CreateADJobParams) => {
try {
const result = await quickJobCreator.createAndSaveGeoJob({
jobId,
bucketSpan,
- embeddable: mapEmbeddable as MapEmbeddable,
+ embeddable,
startJob,
runInRealTime,
sourceDataView: layer.dataView,
@@ -149,8 +143,7 @@ export const CompatibleLayer: FC = ({ embeddable, layer, layerIndex }) =>
layerIndex={layerIndex}
createADJob={createGeoJob}
createADJobInWizard={createGeoJobInWizard}
- embeddable={embeddable}
- timeRange={embeddable.getInput().timeRange}
+ timeRange={embeddable.localTimeRange?.value}
incomingCreateError={createError}
>
<>
diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/layer.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/layer.tsx
index 1d519cb739fc..3d3143824676 100644
--- a/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/layer.tsx
+++ b/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/layer.tsx
@@ -7,7 +7,6 @@
import type { FC } from 'react';
import React from 'react';
-import type { MapEmbeddable } from '@kbn/maps-plugin/public';
import {
EuiFlexGroup,
EuiFlexItem,
@@ -17,6 +16,7 @@ import {
EuiSplitPanel,
EuiHorizontalRule,
} from '@elastic/eui';
+import type { MapApi } from '@kbn/maps-plugin/public';
import type { LayerResult } from '../../../../../application/jobs/new_job/job_from_map';
import { CompatibleLayer } from './compatible_layer';
import { IncompatibleLayer } from './incompatible_layer';
@@ -24,7 +24,7 @@ import { IncompatibleLayer } from './incompatible_layer';
interface Props {
layer: LayerResult;
layerIndex: number;
- embeddable: MapEmbeddable;
+ embeddable: MapApi;
}
export const Layer: FC = ({ layer, layerIndex, embeddable }) => (
diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx
index 3c29b5b4dd5b..0f98fd5a2977 100644
--- a/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx
+++ b/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx
@@ -10,14 +10,13 @@ import React from 'react';
import type { CoreStart } from '@kbn/core/public';
import type { SharePluginStart } from '@kbn/share-plugin/public';
import type { DataPublicPluginStart } from '@kbn/data-plugin/public';
-import type { MapEmbeddable } from '@kbn/maps-plugin/public';
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
-
+import type { MapApi } from '@kbn/maps-plugin/public';
import { GeoJobFlyout } from './flyout';
import { createFlyout, type FlyoutComponentProps } from '../common/create_flyout';
export async function showMapVisToADJobFlyout(
- embeddable: MapEmbeddable,
+ embeddable: MapApi,
coreStart: CoreStart,
share: SharePluginStart,
data: DataPublicPluginStart,
diff --git a/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx b/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx
index ce62db458746..e4ce56e8f5a5 100644
--- a/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx
+++ b/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx
@@ -6,17 +6,20 @@
*/
import { i18n } from '@kbn/i18n';
-import type { Embeddable } from '@kbn/lens-plugin/public';
-import type { MapEmbeddable } from '@kbn/maps-plugin/public';
+import { type EmbeddableApiContext, apiHasType, apiIsOfType } from '@kbn/presentation-publishing';
import type { UiActionsActionDefinition } from '@kbn/ui-actions-plugin/public';
+import { isLensApi } from '@kbn/lens-plugin/public';
+import { isMapApi } from '@kbn/maps-plugin/public';
+import type { ActionApi } from './types';
import type { MlCoreSetup } from '../plugin';
-import { isLensEmbeddable, isMapEmbeddable } from '../application/jobs/new_job/job_from_dashboard';
export const CREATE_LENS_VIS_TO_ML_AD_JOB_ACTION = 'createMLADJobAction';
+export const isApiCompatible = (api: unknown | null): api is ActionApi => apiHasType(api);
+
export function createVisToADJobAction(
getStartServices: MlCoreSetup['getStartServices']
-): UiActionsActionDefinition<{ embeddable: Embeddable | MapEmbeddable }> {
+): UiActionsActionDefinition {
return {
id: 'create-ml-ad-job-action',
type: CREATE_LENS_VIS_TO_ML_AD_JOB_ACTION,
@@ -27,20 +30,20 @@ export function createVisToADJobAction(
i18n.translate('xpack.ml.actions.createADJobFromLens', {
defaultMessage: 'Create anomaly detection job',
}),
- async execute({ embeddable }) {
+ async execute({ embeddable }: EmbeddableApiContext) {
if (!embeddable) {
throw new Error('Not possible to execute an action without the embeddable context');
}
try {
- if (isLensEmbeddable(embeddable)) {
+ if (isLensApi(embeddable)) {
const [{ showLensVisToADJobFlyout }, [coreStart, { share, data, lens, dashboard }]] =
await Promise.all([import('../embeddables/job_creation/lens'), getStartServices()]);
if (lens === undefined) {
return;
}
await showLensVisToADJobFlyout(embeddable, coreStart, share, data, dashboard, lens);
- } else if (isMapEmbeddable(embeddable)) {
+ } else if (isMapApi(embeddable)) {
const [{ showMapVisToADJobFlyout }, [coreStart, { share, data, dashboard }]] =
await Promise.all([import('../embeddables/job_creation/map'), getStartServices()]);
await showMapVisToADJobFlyout(embeddable, coreStart, share, data, dashboard);
@@ -49,19 +52,20 @@ export function createVisToADJobAction(
return Promise.reject();
}
},
- async isCompatible(context: { embeddable: Embeddable }) {
- const embeddableType = context.embeddable.type;
- if (embeddableType !== 'map') {
- if (embeddableType !== 'lens' || !context.embeddable.getSavedVis()) {
- return false;
- }
- }
+ async isCompatible({ embeddable }: EmbeddableApiContext) {
+ if (
+ !isApiCompatible(embeddable) ||
+ !(apiIsOfType(embeddable, 'lens') || apiIsOfType(embeddable, 'map'))
+ )
+ return false;
- const [{ getJobsItemsFromEmbeddable, isCompatibleVisualizationType }, [coreStart, { lens }]] =
- await Promise.all([
- import('../application/jobs/new_job/job_from_lens'),
- getStartServices(),
- ]);
+ const [
+ { getChartInfoFromVisualization, isCompatibleVisualizationType },
+ [coreStart, { lens }],
+ ] = await Promise.all([
+ import('../application/jobs/new_job/job_from_lens'),
+ getStartServices(),
+ ]);
const { isCompatibleMapVisualization } = await import(
'../application/jobs/new_job/job_from_map'
);
@@ -74,13 +78,17 @@ export function createVisToADJobAction(
}
try {
- if (embeddableType === 'lens' && lens) {
- const { chartInfo } = await getJobsItemsFromEmbeddable(context.embeddable, lens);
- return isCompatibleVisualizationType(chartInfo!);
- } else if (isMapEmbeddable(context.embeddable)) {
- return isCompatibleMapVisualization(context.embeddable);
+ if (isLensApi(embeddable) && lens) {
+ const vis = embeddable.getSavedVis();
+ if (!vis) {
+ return false;
+ }
+ const chartInfo = await getChartInfoFromVisualization(lens, vis);
+ return isCompatibleVisualizationType(chartInfo);
+ } else if (isMapApi(embeddable)) {
+ return isCompatibleMapVisualization(embeddable);
}
- return true;
+ return false;
} catch (error) {
// eslint-disable-next-line no-console
console.error('Error attempting to check for ML job compatibility', error);
diff --git a/x-pack/plugins/ml/public/ui_actions/types.ts b/x-pack/plugins/ml/public/ui_actions/types.ts
new file mode 100644
index 000000000000..24459c48bde2
--- /dev/null
+++ b/x-pack/plugins/ml/public/ui_actions/types.ts
@@ -0,0 +1,11 @@
+/*
+ * 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 { LensApi } from '@kbn/lens-plugin/public';
+import type { MapApi } from '@kbn/maps-plugin/public';
+
+export type ActionApi = MapApi | LensApi;
diff --git a/x-pack/plugins/ml/tsconfig.json b/x-pack/plugins/ml/tsconfig.json
index 0f30e96a0be2..79391f2c156f 100644
--- a/x-pack/plugins/ml/tsconfig.json
+++ b/x-pack/plugins/ml/tsconfig.json
@@ -115,6 +115,7 @@
"@kbn/ml-creation-wizard-utils",
"@kbn/deeplinks-management",
"@kbn/code-editor",
+ "@kbn/presentation-publishing",
"@kbn/core-elasticsearch-server",
"@kbn/core-elasticsearch-client-server-mocks",
],
From 19cfb9ffba8b6e38c525beedcca690f08f566d6f Mon Sep 17 00:00:00 2001
From: Sander Philipse <94373878+sphilipse@users.noreply.github.com>
Date: Mon, 11 Mar 2024 17:57:17 +0100
Subject: [PATCH 020/100] [Search] Fix attach index not working properly
(#178348)
## Summary
This fixes attaching an index by:
- Checking whether an index already exists
- Showing the error for that
- Allowing editing an existing index
- Rerouting to the connector page after changing an index name so we
don't see weird index changes
- Showing the error for when an index name is already in use by a
connector (WIP)
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
.../api/connector/attach_index_api_logic.ts | 10 +-
.../api/index/cached_fetch_index_api_logic.ts | 6 +-
.../connector_detail/attach_index_box.tsx | 136 +++---
.../connector_detail/attach_index_logic.ts | 45 +-
.../connector_configuration.tsx | 5 +-
.../connector_detail/connector_detail.tsx | 5 +-
.../native_connector_configuration.tsx | 4 +-
.../connector/connector_configuration.tsx | 410 ------------------
.../native_connector_configuration.tsx | 294 -------------
.../components/search_index/search_index.tsx | 2 +-
.../routes/enterprise_search/connectors.ts | 30 +-
.../server/utils/identify_exceptions.ts | 28 ++
.../plugins/enterprise_search/tsconfig.json | 3 +-
.../translations/translations/fr-FR.json | 22 -
.../translations/translations/ja-JP.json | 22 -
.../translations/translations/zh-CN.json | 22 -
16 files changed, 174 insertions(+), 870 deletions(-)
delete mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx
delete mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/native_connector_configuration/native_connector_configuration.tsx
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/attach_index_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/attach_index_api_logic.ts
index bc25d0151a5a..56e3daccf231 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/attach_index_api_logic.ts
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/attach_index_api_logic.ts
@@ -13,15 +13,21 @@ export interface AttachIndexApiLogicArgs {
indexName: string;
}
+export interface AttachIndexApiLogicResponse {
+ connectorId: string;
+ indexName: string;
+}
+
export const attachIndex = async ({
connectorId,
indexName,
-}: AttachIndexApiLogicArgs): Promise => {
+}: AttachIndexApiLogicArgs): Promise => {
const route = `/internal/enterprise_search/connectors/${connectorId}/index_name/${indexName}`;
await HttpLogic.values.http.put(route);
+ return { connectorId, indexName };
};
export const AttachIndexApiLogic = createApiLogic(['add_connector_api_logic'], attachIndex);
-export type AttachIndexApiLogicActions = Actions;
+export type AttachIndexApiLogicActions = Actions;
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/cached_fetch_index_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/cached_fetch_index_api_logic.ts
index 84784edd8571..538f358b4d59 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/cached_fetch_index_api_logic.ts
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/cached_fetch_index_api_logic.ts
@@ -98,9 +98,11 @@ export const CachedFetchIndexApiLogic = kea<
if (indexName === values.indexName) return;
clearTimeout(values.pollTimeoutId);
}
- actions.makeRequest({ indexName });
+ if (indexName) {
+ actions.makeRequest({ indexName });
- actions.createPollTimeout(FETCH_INDEX_POLLING_DURATION);
+ actions.createPollTimeout(FETCH_INDEX_POLLING_DURATION);
+ }
},
stopPolling: () => {
if (values.pollTimeoutId) {
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx
index 75272313fd0f..b9fa42122a82 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx
@@ -6,7 +6,7 @@
*/
import React, { useEffect, useState } from 'react';
-import { useLocation } from 'react-router-dom';
+import { useLocation, useParams } from 'react-router-dom';
import { useActions, useValues } from 'kea';
@@ -39,22 +39,26 @@ export interface AttachIndexBoxProps {
}
export const AttachIndexBox: React.FC = ({ connector }) => {
+ const indexName = decodeURIComponent(useParams<{ indexName: string }>().indexName);
const { createIndex, attachIndex, setConnector, checkIndexExists } = useActions(AttachIndexLogic);
const {
isLoading: isSaveLoading,
isExistLoading,
- canCreateSameNameIndex,
+ indexExists,
+ createApiError,
+ attachApiError,
} = useValues(AttachIndexLogic);
- const [selectedIndex, setSelectedIndex] = useState<{ label: string; shouldCreate?: boolean }>();
+ const [selectedIndex, setSelectedIndex] = useState<
+ { label: string; shouldCreate?: boolean } | undefined
+ >(
+ connector.index_name
+ ? {
+ label: connector.index_name,
+ }
+ : undefined
+ );
const [selectedLanguage] = useState();
- const [showError, setShowError] = useState(false);
- useEffect(() => {
- if (!canCreateSameNameIndex) {
- setShowError(true);
- } else {
- setShowError(false);
- }
- }, [canCreateSameNameIndex]);
+ const [query, setQuery] = useState();
const { makeRequest } = useActions(FetchAllIndicesAPILogic);
const { data, status } = useValues(FetchAllIndicesAPILogic);
@@ -63,7 +67,7 @@ export const AttachIndexBox: React.FC = ({ connector }) =>
const onSave = () => {
if (selectedIndex?.shouldCreate) {
createIndex({ indexName: selectedIndex.label, language: selectedLanguage ?? null });
- } else if (selectedIndex) {
+ } else if (selectedIndex && !(selectedIndex.label === connector.index_name)) {
attachIndex({ connectorId: connector.id, indexName: selectedIndex.label });
}
};
@@ -78,11 +82,17 @@ export const AttachIndexBox: React.FC = ({ connector }) =>
useEffect(() => {
setConnector(connector);
makeRequest({});
- if (!connector.index_name) {
+ if (!connector.index_name && connector.name) {
checkIndexExists({ indexName: connector.name });
}
}, [connector.id]);
+ useEffect(() => {
+ if (query) {
+ checkIndexExists({ indexName: query });
+ }
+ }, [query]);
+
const { hash } = useLocation();
useEffect(() => {
if (hash) {
@@ -96,6 +106,22 @@ export const AttachIndexBox: React.FC = ({ connector }) =>
}
}, [hash]);
+ const error =
+ !!query && indexExists[query]
+ ? i18n.translate(
+ 'xpack.enterpriseSearch.attachIndexBox.euiFormRow.associatedIndexErrorTextLabel',
+ {
+ defaultMessage:
+ "You can't create a new index using an existing index name. Choose an existing index or create a new index with a new name.",
+ }
+ )
+ : attachApiError?.body?.message || createApiError?.body?.message || undefined;
+
+ if (indexName) {
+ // We don't want to let people edit indices when on the index route
+ return <>>;
+ }
+
return (
@@ -122,26 +148,12 @@ export const AttachIndexBox: React.FC = ({ connector }) =>
'xpack.enterpriseSearch.attachIndexBox.euiFormRow.associatedIndexLabel',
{ defaultMessage: 'Associated index' }
)}
- helpText={
- showError
- ? ''
- : i18n.translate(
- 'xpack.enterpriseSearch.attachIndexBox.euiFormRow.associatedIndexHelpTextLabel',
- { defaultMessage: 'You can use an existing index or create a new one.' }
- )
- }
- error={
- showError
- ? i18n.translate(
- 'xpack.enterpriseSearch.attachIndexBox.euiFormRow.associatedIndexErrorTextLabel',
- {
- defaultMessage:
- "You can't create a new index using an existing index name. Choose an existing index or create a new index with a new name.",
- }
- )
- : undefined
- }
- isInvalid={showError}
+ helpText={i18n.translate(
+ 'xpack.enterpriseSearch.attachIndexBox.euiFormRow.associatedIndexHelpTextLabel',
+ { defaultMessage: 'You can use an existing index or create a new one.' }
+ )}
+ error={error}
+ isInvalid={!!error}
>
= ({ connector }) =>
customOptionText={i18n.translate(
'xpack.enterpriseSearch.attachIndexBox.euiFormRow.indexSelector.customOption',
{
- defaultMessage: 'Create {searchValue} new index',
+ defaultMessage: 'Create index {searchValue}',
values: { searchValue: '{searchValue}' },
}
)}
isLoading={isLoading}
options={options}
onChange={(selection) => {
- if (showError) {
- setShowError(false);
- }
setSelectedIndex(selection[0] || undefined);
}}
selectedOptions={selectedIndex ? [selectedIndex] : undefined}
onCreateOption={(value) => {
- if (showError) {
- setShowError(false);
- }
setSelectedIndex({ label: value.trim(), shouldCreate: true });
}}
- singleSelection={{ asPlainText: true }}
+ onSearchChange={(value) => setQuery(value)}
+ singleSelection
/>
+ {!connector.index_name && (
+
+ {
+ createIndex({ indexName: connector.name, language: null });
+ }}
+ isLoading={isSaveLoading || isExistLoading}
+ disabled={indexExists[connector.name]}
+ >
+ {i18n.translate('xpack.enterpriseSearch.attachIndexBox.createSameIndexButtonLabel', {
+ defaultMessage: 'Create and attach an index named {indexName}',
+ values: { indexName: connector.name },
+ })}
+
+ {indexExists[connector.name] ? (
+
+ {i18n.translate('xpack.enterpriseSearch.attachIndexBox.indexNameExistsError', {
+ defaultMessage: 'Index with name {indexName} already exists',
+ values: { indexName: connector.name },
+ })}
+
+ ) : (
+ <>>
+ )}
+
+ )}
{
- createIndex({ indexName: connector.name, language: null });
- }}
- isLoading={isSaveLoading || isExistLoading}
- disabled={!canCreateSameNameIndex}
+ onClick={() => onSave()}
+ disabled={!selectedIndex || selectedIndex.label === connector.index_name}
+ isLoading={isSaveLoading}
>
- {i18n.translate('xpack.enterpriseSearch.attachIndexBox.createSameIndexButtonLabel', {
- defaultMessage: 'Create and attach an index with same name',
- })}
-
-
-
- onSave()} disabled={!selectedIndex} isLoading={isSaveLoading}>
{i18n.translate('xpack.enterpriseSearch.attachIndexBox.saveConfigurationButtonLabel', {
- defaultMessage: 'Save Configuration',
+ defaultMessage: 'Save configuration',
})}
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_logic.ts
index 298fc333490e..edb4f8c462af 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_logic.ts
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_logic.ts
@@ -9,7 +9,7 @@ import { kea, MakeLogicType } from 'kea';
import { Connector } from '@kbn/search-connectors';
-import { Status } from '../../../../../common/types/api';
+import { HttpError, Status } from '../../../../../common/types/api';
import {
AttachIndexApiLogic,
@@ -28,7 +28,8 @@ export interface AttachIndexActions {
attachIndex: AttachIndexApiLogicActions['makeRequest'];
attachIndexApiError: AttachIndexApiLogicActions['apiError'];
attachIndexApiSuccess: AttachIndexApiLogicActions['apiSuccess'];
- checkIndexExists: IndexExistsApiLogicActions['makeRequest'];
+ callCheckIndexExists: IndexExistsApiLogicActions['makeRequest'];
+ checkIndexExists: ({ indexName }: { indexName: string }) => { indexName: string };
checkIndexExistsApiError: IndexExistsApiLogicActions['apiError'];
checkIndexExistsApiSuccess: IndexExistsApiLogicActions['apiSuccess'];
createIndex: CreateApiIndexApiLogicActions['makeRequest'];
@@ -38,17 +39,24 @@ export interface AttachIndexActions {
}
export interface AttachIndexValues {
+ attachApiError: HttpError;
attachApiStatus: Status;
- canCreateSameNameIndex: boolean;
connector: Connector | null;
+ createApiError: HttpError;
createIndexApiStatus: Status;
+ indexExists: Record;
indexExistsApiStatus: Status;
isExistLoading: boolean;
isLoading: boolean;
}
export const AttachIndexLogic = kea>({
- actions: { setConnector: (connector) => connector },
+ actions: {
+ checkIndexExists: ({ indexName }) => ({
+ indexName,
+ }),
+ setConnector: (connector) => connector,
+ },
connect: {
actions: [
AttachIndexApiLogic,
@@ -65,26 +73,24 @@ export const AttachIndexLogic = kea ({
- attachIndexApiSuccess: () => {
- if (values.connector) {
- // TODO this is hacky
- location.reload();
- }
+ checkIndexExists: async ({ indexName }, breakpoint) => {
+ await breakpoint(200);
+ actions.callCheckIndexExists({ indexName });
},
createIndexApiSuccess: async ({ indexName }, breakpoint) => {
if (values.connector) {
@@ -95,18 +101,21 @@ export const AttachIndexLogic = kea !exists,
- },
- ],
connector: [
null,
{
setConnector: (_, connector) => connector,
},
],
+ indexExists: [
+ {},
+ {
+ checkIndexExistsApiSuccess: (state, { exists, indexName }) => ({
+ ...state,
+ [indexName]: exists,
+ }),
+ },
+ ],
},
selectors: ({ selectors }) => ({
isExistLoading: [
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx
index 911e91f6c54c..5319f0404238 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx
@@ -66,7 +66,6 @@ export const ConnectorConfiguration: React.FC = () => {
return <>>;
}
- // TODO make it work without index if possible
if (connector.is_native && connector.service_type) {
return ;
}
@@ -353,12 +352,12 @@ export const ConnectorConfiguration: React.FC = () => {
]}
/>
- {!connector.index_name && (
+ {
<>
>
- )}
+ }
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_detail.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_detail.tsx
index 796173903f4e..b17f501501d8 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_detail.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_detail.tsx
@@ -45,8 +45,11 @@ export enum ConnectorDetailTabId {
export const ConnectorDetail: React.FC = () => {
const connectorId = decodeURIComponent(useParams<{ connectorId: string }>().connectorId);
const { hasFilteringFeature, isLoading, index, connector } = useValues(ConnectorViewLogic);
- const { startConnectorPoll } = useActions(ConnectorViewLogic);
+ const { fetchConnectorApiReset, startConnectorPoll, stopConnectorPoll } =
+ useActions(ConnectorViewLogic);
useEffect(() => {
+ stopConnectorPoll();
+ fetchConnectorApiReset();
startConnectorPoll(connectorId);
}, [connectorId]);
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/native_connector_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/native_connector_configuration.tsx
index 2d992b223bab..04c49f07b377 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/native_connector_configuration.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/native_connector_configuration.tsx
@@ -233,12 +233,12 @@ export const NativeConnectorConfiguration: React.FC = () => {
]}
/>
- {!connector.index_name && (
+ {
<>
>
- )}
+ }
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx
deleted file mode 100644
index 382d1a45df1e..000000000000
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx
+++ /dev/null
@@ -1,410 +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 { useActions, useValues } from 'kea';
-
-import {
- EuiText,
- EuiFlexGroup,
- EuiFlexItem,
- EuiLink,
- EuiPanel,
- EuiSpacer,
- EuiSteps,
- EuiCodeBlock,
- EuiCallOut,
- EuiButton,
-} from '@elastic/eui';
-
-import { i18n } from '@kbn/i18n';
-
-import { FormattedMessage } from '@kbn/i18n-react';
-
-import { ConnectorConfigurationComponent, ConnectorStatus } from '@kbn/search-connectors';
-
-import { Status } from '../../../../../../common/types/api';
-
-import { BetaConnectorCallout } from '../../../../shared/beta/beta_connector_callout';
-import { useCloudDetails } from '../../../../shared/cloud_details/cloud_details';
-import { docLinks } from '../../../../shared/doc_links';
-import { generateEncodedPath } from '../../../../shared/encode_path_params';
-import { HttpLogic } from '../../../../shared/http/http_logic';
-import { LicensingLogic } from '../../../../shared/licensing';
-import { EuiButtonTo, EuiLinkTo } from '../../../../shared/react_router_helpers';
-
-import { GenerateConnectorApiKeyApiLogic } from '../../../api/connector/generate_connector_api_key_api_logic';
-import { ConnectorConfigurationApiLogic } from '../../../api/connector/update_connector_configuration_api_logic';
-import { CONNECTOR_DETAIL_TAB_PATH } from '../../../routes';
-
-import { ConnectorDetailTabId } from '../../connector_detail/connector_detail';
-import { ConnectorViewLogic } from '../../connector_detail/connector_view_logic';
-import { SyncsContextMenu } from '../components/header_actions/syncs_context_menu';
-
-import { ApiKeyConfig } from './api_key_configuration';
-import { ConnectorNameAndDescription } from './connector_name_and_description/connector_name_and_description';
-import { BETA_CONNECTORS, CONNECTORS, getConnectorTemplate } from './constants';
-import { NativeConnectorConfiguration } from './native_connector_configuration/native_connector_configuration';
-
-export const ConnectorConfiguration: React.FC = () => {
- const { data: apiKeyData } = useValues(GenerateConnectorApiKeyApiLogic);
- const { connector, fetchConnectorApiStatus } = useValues(ConnectorViewLogic);
- const { fetchConnector } = useActions(ConnectorViewLogic);
- const cloudContext = useCloudDetails();
- const { hasPlatinumLicense } = useValues(LicensingLogic);
- const { status } = useValues(ConnectorConfigurationApiLogic);
- const { makeRequest } = useActions(ConnectorConfigurationApiLogic);
- const { http } = useValues(HttpLogic);
-
- if (!connector) {
- return <>>; // TODO: show nicer error message
- }
-
- if (connector.is_native && connector.service_type) {
- return ;
- }
-
- const hasApiKey = !!(connector.api_key_id ?? apiKeyData);
- const docsUrl = CONNECTORS.find(
- ({ serviceType }) => serviceType === connector.service_type
- )?.docsUrl;
-
- // TODO service_type === "" is considered unknown/custom connector multipleplaces replace all of them with a better solution
- const isBeta =
- !connector.service_type ||
- Boolean(BETA_CONNECTORS.find(({ serviceType }) => serviceType === connector.service_type));
-
- return (
- <>
-
-
-
-
-
- ) : (
- i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.apiKey.noApiKeyLabel',
- {
- defaultMessage: 'Please set an index name before generating an API key',
- }
- )
- ),
- status: hasApiKey ? 'complete' : 'incomplete',
- title: i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.generateApiKey.title',
- {
- defaultMessage: 'Generate an API key',
- }
- ),
- titleSize: 'xs',
- },
- {
- children: ,
- status: connector.description ? 'complete' : 'incomplete',
- title: i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.nameAndDescriptionTitle',
- {
- defaultMessage: 'Name and description',
- }
- ),
- titleSize: 'xs',
- },
- {
- children: (
- <>
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.configurationFileLink',
- { defaultMessage: 'configuration file' }
- )}
-
- ),
- }}
- />
-
-
-
- {getConnectorTemplate({
- apiKeyData,
- connectorData: {
- id: connector.id,
- service_type: connector.service_type,
- },
- host: cloudContext.elasticsearchUrl,
- })}
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorDeployedText',
- {
- defaultMessage:
- 'Once configured, deploy the connector on your infrastructure.',
- }
- )}
-
- >
- ),
- status:
- !connector.status || connector.status === ConnectorStatus.CREATED
- ? 'incomplete'
- : 'complete',
- title: i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.deployConnector.title',
- {
- defaultMessage: 'Deploy connector service',
- }
- ),
- titleSize: 'xs',
- },
- {
- children: (
-
- makeRequest({
- configuration,
- connectorId: connector.id, // TODO
- })
- }
- subscriptionLink={docLinks.licenseManagement}
- stackManagementLink={http.basePath.prepend(
- '/app/management/stack/license_management'
- )}
- >
- {!connector.status || connector.status === ConnectorStatus.CREATED ? (
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorText',
- {
- defaultMessage:
- 'Your connector has not connected to Search. Troubleshoot your configuration and refresh the page.',
- }
- )}
-
- fetchConnector({ connectorId: connector.id })}
- isLoading={fetchConnectorApiStatus === Status.LOADING}
- >
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnector.button.label',
- {
- defaultMessage: 'Recheck now',
- }
- )}
-
-
- ) : (
-
- )}
-
- ),
- status:
- connector.status === ConnectorStatus.CONNECTED ? 'complete' : 'incomplete',
- title: i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.enhance.title',
- {
- defaultMessage: 'Configure your connector client',
- }
- ),
- titleSize: 'xs',
- },
- {
- children: (
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.scheduleSync.description',
- {
- defaultMessage:
- 'Finalize your connector by triggering a one-time sync, or setting a recurring sync to keep your data source in sync over time',
- }
- )}
-
-
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.button.label',
- {
- defaultMessage: 'Set schedule and sync',
- }
- )}
-
-
-
-
-
-
-
-
- ),
- status: connector.scheduling.full.enabled ? 'complete' : 'incomplete',
- title: i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.title',
- {
- defaultMessage: 'Sync your data',
- }
- ),
- titleSize: 'xs',
- },
- ]}
- />
-
-
-
-
-
-
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.support.title',
- {
- defaultMessage: 'Support and documentation',
- }
- )}
-
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.support.description',
- {
- defaultMessage:
- 'You need to deploy this connector on your own infrastructure.',
- }
- )}
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.support.viewDocumentation.label',
- {
- defaultMessage: 'View documentation',
- }
- )}
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.support.manageKeys.label',
- {
- defaultMessage: 'Manage API keys',
- }
- )}
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.support.readme.label',
- {
- defaultMessage: 'Connector readme',
- }
- )}
-
-
- {docsUrl && (
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.support.dockerDeploy.label',
- {
- defaultMessage: 'Deploy with Docker',
- }
- )}
-
-
- )}
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.support.deploy.label',
- {
- defaultMessage: 'Deploy without Docker',
- }
- )}
-
-
-
-
-
- {isBeta ? (
-
-
-
- ) : null}
-
-
-
- >
- );
-};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/native_connector_configuration/native_connector_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/native_connector_configuration/native_connector_configuration.tsx
deleted file mode 100644
index 39b39ee50b0b..000000000000
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/native_connector_configuration/native_connector_configuration.tsx
+++ /dev/null
@@ -1,294 +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 { useValues } from 'kea';
-
-import {
- EuiCallOut,
- EuiFlexGroup,
- EuiFlexItem,
- EuiIcon,
- EuiLink,
- EuiPanel,
- EuiSpacer,
- EuiSteps,
- EuiText,
- EuiTitle,
-} from '@elastic/eui';
-
-import { i18n } from '@kbn/i18n';
-
-import { BetaConnectorCallout } from '../../../../../shared/beta/beta_connector_callout';
-import { docLinks } from '../../../../../shared/doc_links';
-import { HttpLogic } from '../../../../../shared/http';
-import { CONNECTOR_ICONS } from '../../../../../shared/icons/connector_icons';
-import { KibanaLogic } from '../../../../../shared/kibana';
-
-import { GenerateConnectorApiKeyApiLogic } from '../../../../api/connector/generate_connector_api_key_api_logic';
-import { hasConfiguredConfiguration } from '../../../../utils/has_configured_configuration';
-import { isConnectorIndex } from '../../../../utils/indices';
-import { IndexViewLogic } from '../../index_view_logic';
-import { ApiKeyConfig } from '../api_key_configuration';
-import { ConnectorNameAndDescription } from '../connector_name_and_description/connector_name_and_description';
-import { BETA_CONNECTORS, NATIVE_CONNECTORS } from '../constants';
-
-import { ConvertConnector } from './convert_connector';
-import { NativeConnectorAdvancedConfiguration } from './native_connector_advanced_configuration';
-import { NativeConnectorConfigurationConfig } from './native_connector_configuration_config';
-import { ResearchConfiguration } from './research_configuration';
-
-export const NativeConnectorConfiguration: React.FC = () => {
- const { index } = useValues(IndexViewLogic);
- const { config } = useValues(KibanaLogic);
- const { errorConnectingMessage } = useValues(HttpLogic);
- const { data: apiKeyData } = useValues(GenerateConnectorApiKeyApiLogic);
-
- if (!isConnectorIndex(index)) {
- return <>>;
- }
-
- const nativeConnector = NATIVE_CONNECTORS.find(
- (connector) => connector.serviceType === index.connector.service_type
- ) || {
- docsUrl: '',
- externalAuthDocsUrl: '',
- externalDocsUrl: '',
- icon: CONNECTOR_ICONS.custom,
- iconPath: 'custom.svg',
- isBeta: true,
- isNative: true,
- keywords: [],
- name: index.connector.name,
- serviceType: index.connector.service_type ?? '',
- };
-
- const hasDescription = !!index.connector.description;
- const hasConfigured = hasConfiguredConfiguration(index.connector.configuration);
- const hasConfiguredAdvanced =
- index.connector.last_synced ||
- index.connector.scheduling.full.enabled ||
- index.connector.scheduling.incremental.enabled;
- const hasResearched = hasDescription || hasConfigured || hasConfiguredAdvanced;
- const icon = nativeConnector.icon;
-
- const hasApiKey = !!(index.connector.api_key_id ?? apiKeyData);
-
- // TODO service_type === "" is considered unknown/custom connector multipleplaces replace all of them with a better solution
- const isBeta =
- !index.connector.service_type ||
- Boolean(
- BETA_CONNECTORS.find(({ serviceType }) => serviceType === index.connector.service_type)
- );
-
- return (
- <>
-
-
-
-
-
- {icon && (
-
-
-
- )}
-
-
- {nativeConnector?.name ?? index.connector.name}
-
-
-
-
- {config.host && config.canDeployEntSearch && errorConnectingMessage && (
- <>
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.entSearchWarning.text',
- {
- defaultMessage:
- 'Native connectors require a running Enterprise Search instance to sync content from source.',
- }
- )}
-
-
-
-
- >
- )}
- ,
- status: hasResearched ? 'complete' : 'incomplete',
- title: i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.researchConfigurationTitle',
- {
- defaultMessage: 'Research configuration requirements',
- }
- ),
- titleSize: 'xs',
- },
- {
- children: (
-
- ),
- status: hasApiKey ? 'complete' : 'incomplete',
- title: i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.manageApiKeyTitle',
- {
- defaultMessage: 'Manage API key',
- }
- ),
- titleSize: 'xs',
- },
- {
- children: ,
- status: hasDescription ? 'complete' : 'incomplete',
- title: i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.nameAndDescriptionTitle',
- {
- defaultMessage: 'Name and description',
- }
- ),
- titleSize: 'xs',
- },
- {
- children: (
-
- ),
- status: hasConfigured ? 'complete' : 'incomplete',
- title: i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.configurationTitle',
- {
- defaultMessage: 'Configuration',
- }
- ),
- titleSize: 'xs',
- },
- {
- children: ,
- status: hasConfiguredAdvanced ? 'complete' : 'incomplete',
- title: i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.advancedConfigurationTitle',
- {
- defaultMessage: 'Sync your data',
- }
- ),
- titleSize: 'xs',
- },
- ]}
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.schedulingReminder.title',
- {
- defaultMessage: 'Configurable sync schedule',
- }
- )}
-
-
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.schedulingReminder.description',
- {
- defaultMessage:
- 'Remember to set a sync schedule in the Scheduling tab to continually refresh your searchable data.',
- }
- )}
-
-
-
-
-
-
-
-
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.title',
- {
- defaultMessage: 'Document level security',
- }
- )}
-
-
-
-
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.description',
- {
- defaultMessage:
- 'Restrict and personalize the read access users have to the index documents at query time.',
- }
- )}
-
-
- {i18n.translate(
- 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.securityLinkLabel',
- {
- defaultMessage: 'Document level security',
- }
- )}
-
-
-
-
-
-
-
-
-
- {isBeta ? (
-
-
-
-
-
- ) : null}
-
-
-
- >
- );
-};
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx
index 51444b4967c9..eddf8ba934a4 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx
@@ -22,12 +22,12 @@ import { KibanaLogic } from '../../../shared/kibana';
import { SEARCH_INDEX_PATH, SEARCH_INDEX_TAB_PATH } from '../../routes';
import { isConnectorIndex, isCrawlerIndex } from '../../utils/indices';
+import { ConnectorConfiguration } from '../connector_detail/connector_configuration';
import { EnterpriseSearchContentPageTemplate } from '../layout/page_template';
import { baseBreadcrumbs } from '../search_indices';
import { getHeaderActions } from './components/header_actions/header_actions';
-import { ConnectorConfiguration } from './connector/connector_configuration';
import { ConnectorScheduling } from './connector/connector_scheduling';
import { ConnectorSyncRules } from './connector/sync_rules/connector_rules';
import { AutomaticCrawlScheduler } from './crawler/automatic_crawl_scheduler/automatic_crawl_scheduler';
diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts
index 4714da5dd422..7c6706b5aef4 100644
--- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts
+++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts
@@ -6,6 +6,7 @@
*/
import { schema } from '@kbn/config-schema';
+import { ElasticsearchErrorDetails } from '@kbn/es-errors';
import { i18n } from '@kbn/i18n';
import {
@@ -668,7 +669,6 @@ export function registerConnectorRoutes({ router, log }: RouteDependencies) {
elasticsearchErrorHandler(log, async (context, request, response) => {
const { client } = (await context.core).elasticsearch;
const { connectorId, indexName } = request.params;
-
try {
await client.asCurrentUser.transport.request({
body: {
@@ -677,21 +677,23 @@ export function registerConnectorRoutes({ router, log }: RouteDependencies) {
method: 'PUT',
path: `/_connector/${connectorId}/_index_name`,
});
-
- const connector = await fetchConnectorById(client.asCurrentUser, connectorId);
- if (connector?.is_native) {
- // generateApiKey will search for the connector doc based on index_name, so we need to refresh the index before that.
- await client.asCurrentUser.indices.refresh({ index: CONNECTORS_INDEX });
- await generateApiKey(client, indexName, true);
- }
-
- return response.ok();
} catch (error) {
- if (isIndexNotFoundException(error)) {
- return response.ok();
- }
- throw error;
+ // This will almost always be a conflict because another connector has the index configured
+ // ES returns this reason nicely so we can just pass it through
+ return response.customError({
+ body: (error.meta.body as ElasticsearchErrorDetails)?.error?.reason,
+ statusCode: 500,
+ });
}
+
+ const connector = await fetchConnectorById(client.asCurrentUser, connectorId);
+ if (connector?.is_native) {
+ // generateApiKey will search for the connector doc based on index_name, so we need to refresh the index before that.
+ await client.asCurrentUser.indices.refresh({ index: CONNECTORS_INDEX });
+ await generateApiKey(client, indexName, true);
+ }
+
+ return response.ok();
})
);
}
diff --git a/x-pack/plugins/enterprise_search/server/utils/identify_exceptions.ts b/x-pack/plugins/enterprise_search/server/utils/identify_exceptions.ts
index 2ab6b77be124..179608f9b0b7 100644
--- a/x-pack/plugins/enterprise_search/server/utils/identify_exceptions.ts
+++ b/x-pack/plugins/enterprise_search/server/utils/identify_exceptions.ts
@@ -5,6 +5,9 @@
* 2.0.
*/
+import { ElasticsearchErrorDetails, isResponseError } from '@kbn/es-errors';
+import { i18n } from '@kbn/i18n';
+
import { ErrorCode } from '../../common/types/error_codes';
export interface ElasticsearchResponseError {
@@ -67,3 +70,28 @@ export const isExpensiveQueriesNotAllowedException = (error: ElasticsearchRespon
error.meta?.body?.error?.caused_by?.reason?.includes('search.allow_expensive_queries')
);
};
+
+export function getErrorMessage(payload?: unknown): string {
+ if (!payload) {
+ throw new Error('expected error message to be provided');
+ }
+ if (typeof payload === 'string') return payload;
+ // Elasticsearch response errors contain nested error messages
+ if (isResponseError(payload)) {
+ return `[${payload.message}]: ${
+ (payload.meta.body as ElasticsearchErrorDetails)?.error?.reason
+ }`;
+ }
+
+ if ((payload as { message: unknown }).message) {
+ return getErrorMessage((payload as { message: unknown }).message);
+ }
+ try {
+ return JSON.stringify(payload);
+ } catch (error) {
+ // If all else fails, we return a generic error
+ return i18n.translate('xpack.enterpriseSearch.server.errorIdentifyingException', {
+ defaultMessage: 'Internal server error: could not parse error message',
+ });
+ }
+}
diff --git a/x-pack/plugins/enterprise_search/tsconfig.json b/x-pack/plugins/enterprise_search/tsconfig.json
index 4f006ac5dc51..afe5f39650f3 100644
--- a/x-pack/plugins/enterprise_search/tsconfig.json
+++ b/x-pack/plugins/enterprise_search/tsconfig.json
@@ -67,6 +67,7 @@
"@kbn/react-kibana-context-theme",
"@kbn/code-editor",
"@kbn/console-plugin",
- "@kbn/core-notifications-browser"
+ "@kbn/core-notifications-browser",
+ "@kbn/es-errors"
]
}
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json
index 5217a68eea75..0671b83dce59 100644
--- a/x-pack/plugins/translations/translations/fr-FR.json
+++ b/x-pack/plugins/translations/translations/fr-FR.json
@@ -12670,8 +12670,6 @@
"xpack.enterpriseSearch.content.index.pipelines.copyCustomizeCallout.description": "Votre index utilise notre pipeline d'ingestion par défaut {defaultPipeline}. Copiez ce pipeline dans une configuration spécifique à l'index pour déverrouiller la possibilité de créer des pipelines d'ingestion et d'inférence personnalisés.",
"xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.modalBodyAPIText": "{apiIndex} Les modifications apportées aux paramètres ci-dessous sont uniquement fournies à titre indicatif. Ces paramètres ne seront pas conservés dans votre index ou pipeline.",
"xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.description": "D'abord, générez une clé d'API Elasticsearch. Cette clé {apiKeyName} permet d'activer les autorisations de lecture et d'écriture du connecteur pour qu'il puisse indexer les documents dans l'index {indexName} créé. Enregistrez cette clé en lieu sûr, car vous en aurez besoin pour configurer votre connecteur.",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorConnected": "Votre connecteur {name} s’est bien connecté à Search.",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.thirdParagraph": "Dans cette étape, vous devez cloner ou dupliquer le référentiel, puis copier la clé d'API et l'ID de connecteur générés au {link} associé. L'ID de connecteur identifiera ce connecteur auprès de Search. Le type de service détermine pour quel type de source de données le connecteur est configuré.",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.config.sourceSecurityDocumentationLinkLabel": "Authentification {name}",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.connectorConnected": "Votre connecteur {name} s’est bien connecté à Search.",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.convertConnector.description": "Vous souhaitez héberger vous-même ce connecteur natif ? Convertissez-les en {link} afin qu’ils soient autogérés sur votre propre infrastructure. Vous devez convertir ce connecteur si vous souhaitez personnaliser le code à l'aide de notre cadre Python.",
@@ -13975,11 +13973,6 @@
"xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.description": "La génération d'une nouvelle clé d’API invalidera la clé précédente. Êtes-vous sûr de vouloir générer une nouvelle clé d’API ? Cette action ne peut pas être annulée.",
"xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.title": "Générer une clé d'API Elasticsearch",
"xpack.enterpriseSearch.content.indices.configurationConnector.configuration.successToast.title": "Configuration mise à jour",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.configurationFileLink": "fichier de configuration",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorDeployedText": "Une fois le connecteur configuré, déployez-le dans votre infrastructure.",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnector.button.label": "Revérifier maintenant",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorText": "Votre connecteur ne s'est pas connecté à Search. Résolvez vos problèmes de configuration et actualisez la page.",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorTitle": "En attente de votre connecteur",
"xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescription.successToast.title": "Nom et description du connecteur mis à jour",
"xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.description": "En nommant et en décrivant ce connecteur, vos collègues et votre équipe tout entière sauront à quelle utilisation ce connecteur est dédié.",
"xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.saveButtonLabel": "Enregistrer le nom et la description",
@@ -13997,27 +13990,12 @@
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.title": "Sécurité au niveau du document",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.advancedConfigurationTitle": "Configuration avancée",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.configurationTitle": "Configuration",
- "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.nameAndDescriptionTitle": "Nom et description",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.researchConfigurationTitle": "Exigences de la configuration des recherches",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.description": "Finalisez votre connecteur en déclenchant une synchronisation unique, ou en définissant un calendrier de synchronisation récurrent.",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.schedulingButtonLabel": "Définir un calendrier et synchroniser",
"xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.connectorDocumentationLinkLabel": "Documentation",
"xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.description": "Ce connecteur prend en charge plusieurs méthodes d'authentification. Demandez à votre administrateur les informations d'identification correctes pour la connexion.",
- "xpack.enterpriseSearch.content.indices.configurationConnector.scheduleSync.description": "Finalisez votre connecteur en déclenchant une synchronisation unique ou en définissant une synchronisation récurrente pour assurer la synchronisation de votre source de données au fil du temps",
"xpack.enterpriseSearch.content.indices.configurationConnector.scheduling.successToast.title": "Mise à jour réussie du calendrier",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.deployConnector.title": "Déployer un connecteur",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.enhance.title": "Améliorer votre client connecteur",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.generateApiKey.title": "Générer une clé d’API",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.nameAndDescriptionTitle": "Nom et description",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.button.label": "Définir un calendrier et synchroniser",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.title": "Configuration avancée",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.deploy.label": "Déployer sans Docker",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.description": "Vous devez déployer ce connecteur dans votre propre infrastructure.",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.dockerDeploy.label": "Déployer avec Docker",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.manageKeys.label": "Gérer les clés d'API",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.readme.label": "Fichier readme du connecteur",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.title": "Support technique et documentation",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.viewDocumentation.label": "Afficher la documentation",
"xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.error": "Le format JSON n'est pas valide",
"xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.title": "Règles avancées",
"xpack.enterpriseSearch.content.indices.connectorScheduling.page.sync.label": "Sync",
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index 7935f67ee2c6..251e0a75de79 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -12683,8 +12683,6 @@
"xpack.enterpriseSearch.content.index.pipelines.copyCustomizeCallout.description": "インデックスはデフォルトインジェストパイプライン\"{defaultPipeline}\"を使用しています。パイプラインをインデックス固有の構成にコピーし、カスタムインジェストと推論パイプラインを作成できるようにします。",
"xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.modalBodyAPIText": "{apiIndex}以下の設定に行われた変更は参照専用です。これらの設定は、インデックスまたはパイプラインまで永続しません。",
"xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.description": "まず、Elasticsearch APIキーを生成します。この{apiKeyName}は、コネクターがドキュメントを作成された{indexName}インデックスにインデックスするための読み書き権限を有効にします。キーは安全な場所に保管してください。コネクターを構成するときに必要になります。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorConnected": "コネクター{name}は、正常にSearchに接続されました。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.thirdParagraph": "このステップでは、リポジトリを複製またはフォークし、生成されたAPIキーとコネクターIDを、関連付けられた{link}にコピーする必要があります。コネクターIDは、Searchに対するこのコネクターを特定します。サービスタイプは、コネクターが構成されているデータソースのタイプを決定します。",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.config.sourceSecurityDocumentationLinkLabel": "{name}認証",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.connectorConnected": "コネクター{name}は、正常にSearchに接続されました。",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.convertConnector.description": "このセルフホスティングコネクターをカスタマイズしますか?独自のインフラでセルフマネージドされる{link}に変換します。Pythonフレームワークを使用してコードをカスタマイズしたい場合は、このコネクターを変換する必要があります。",
@@ -13988,11 +13986,6 @@
"xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.description": "新しいAPIキーを生成すると、前のキーが無効になります。新しいAPIキーを生成しますか?この操作は元に戻せません。",
"xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.title": "Elasticsearch APIキーを生成",
"xpack.enterpriseSearch.content.indices.configurationConnector.configuration.successToast.title": "構成が更新されました",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.configurationFileLink": "構成ファイル",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorDeployedText": "構成したら、インフラでコネクターをデプロイします。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnector.button.label": "今すぐ再確認",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorText": "コネクターはSearchに接続されていません。構成のトラブルシューティングを行い、ページを更新してください。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorTitle": "コネクターを待機しています",
"xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescription.successToast.title": "コネクター名と説明が更新されました",
"xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.description": "このコネクターの名前と説明を設定すると、他のユーザーやチームでもこのコネクターの目的がわかります。",
"xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.saveButtonLabel": "名前と説明を保存",
@@ -14010,27 +14003,12 @@
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.title": "ドキュメントレベルのセキュリティ",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.advancedConfigurationTitle": "高度な構成",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.configurationTitle": "構成",
- "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.nameAndDescriptionTitle": "名前と説明",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.researchConfigurationTitle": "構成要件の調査",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.description": "ワンタイム同期をトリガーするか、繰り返し同期スケジュールを設定して、コネクターを確定します。",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.schedulingButtonLabel": "スケジュールを設定して同期",
"xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.connectorDocumentationLinkLabel": "ドキュメント",
"xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.description": "このコネクターは複数の認証方法をサポートします。正しい接続資格情報については、管理者に確認してください。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.scheduleSync.description": "ワンタイム同期をトリガーするか、経時的にデータソースを同期し続ける繰り返し同期を設定して、コネクターを確定",
"xpack.enterpriseSearch.content.indices.configurationConnector.scheduling.successToast.title": "スケジュールは正常に更新されました",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.deployConnector.title": "コネクターをデプロイ",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.enhance.title": "コネクタークライアントを強化",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.generateApiKey.title": "APIキーを生成",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.nameAndDescriptionTitle": "名前と説明",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.button.label": "スケジュールを設定して同期",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.title": "高度な構成",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.deploy.label": "Dockerを使用せずにデプロイ",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.description": "このコネクターは、お客様自身のインフラにデプロイする必要があります。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.dockerDeploy.label": "Dockerを使用してデプロイ",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.manageKeys.label": "APIキーの管理",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.readme.label": "コネクターReadme",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.title": "サポートとドキュメント",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.viewDocumentation.label": "ドキュメンテーションを表示",
"xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.error": "JSON形式が無効です",
"xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.title": "詳細ルール",
"xpack.enterpriseSearch.content.indices.connectorScheduling.page.sync.label": "同期",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index 1ef6fd0c26a0..a037a64b8569 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -12777,8 +12777,6 @@
"xpack.enterpriseSearch.content.index.pipelines.copyCustomizeCallout.description": "您的索引正使用默认采集管道 {defaultPipeline}。将该管道复制到特定于索引的配置中,以解锁创建定制采集和推理管道的功能。",
"xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.modalBodyAPIText": "{apiIndex}对以下设置所做的更改仅供参考。这些设置不会持续用于您的索引或管道。",
"xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.description": "首先,生成一个 Elasticsearch API 密钥。此 {apiKeyName} 密钥将为连接器启用读取和写入权限,以便将文档索引到已创建的 {indexName} 索引。请将该密钥保存到安全位置,因为您需要它来配置连接器。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorConnected": "您的连接器 {name} 已成功连接到 Search。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.thirdParagraph": "在此步骤中,您需要克隆或分叉存储库,然后将生成的 API 密钥和连接器 ID 复制到关联的 {link}。连接器 ID 会将此连接器标识到 Search。此服务类型将决定要将连接器配置用于哪些类型的数据源。",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.config.sourceSecurityDocumentationLinkLabel": "{name} 身份验证",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.connectorConnected": "您的连接器 {name} 已成功连接到 Search。",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.convertConnector.description": "是否要自我托管此本机连接器?将其转换为将在您自己的基础设施上进行自我管理的 {link}。如果希望使用我们的 Python 框架定制代码,您需要转换此连接器。",
@@ -14082,11 +14080,6 @@
"xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.description": "生成新的 API 密钥将使之前的密钥失效。是否确定要生成新的 API 密钥?此操作无法撤消。",
"xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.title": "生成 Elasticsearch API 密钥",
"xpack.enterpriseSearch.content.indices.configurationConnector.configuration.successToast.title": "已更新配置",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.configurationFileLink": "配置文件",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorDeployedText": "配置后,请在您的基础设施上部署连接器。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnector.button.label": "立即重新检查",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorText": "您的连接器尚未连接到 Search。排除配置故障并刷新页面。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorTitle": "等候您的连接器",
"xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescription.successToast.title": "已更新连接器名称和描述",
"xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.description": "通过命名和描述此连接器,您的同事和更广泛的团队将了解本连接器的用途。",
"xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.saveButtonLabel": "保存名称和描述",
@@ -14104,27 +14097,12 @@
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.title": "文档级别安全性",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.advancedConfigurationTitle": "高级配置",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.configurationTitle": "配置",
- "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.nameAndDescriptionTitle": "名称和描述",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.researchConfigurationTitle": "研究配置要求",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.description": "通过触发一次时间同步或设置重复同步计划来最终确定您的连接器。",
"xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.schedulingButtonLabel": "设置计划并同步",
"xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.connectorDocumentationLinkLabel": "文档",
"xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.description": "此连接器支持几种身份验证方法。请联系管理员获取正确的连接凭据。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.scheduleSync.description": "通过触发一次性同步或设置重复同步来最终确定您的连接器,以使数据源在一段时间内保持同步",
"xpack.enterpriseSearch.content.indices.configurationConnector.scheduling.successToast.title": "计划已成功更新",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.deployConnector.title": "部署连接器",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.enhance.title": "增强连接器客户端",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.generateApiKey.title": "生成 API 密钥",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.nameAndDescriptionTitle": "名称和描述",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.button.label": "设置计划并同步",
- "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.title": "高级配置",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.deploy.label": "不通过 Docker 部署",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.description": "您需要在自己的基础设施上部署此连接器。",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.dockerDeploy.label": "通过 Docker 部署",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.manageKeys.label": "管理 API 密钥",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.readme.label": "连接器自述文件",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.title": "支持和文档",
- "xpack.enterpriseSearch.content.indices.configurationConnector.support.viewDocumentation.label": "查看文档",
"xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.error": "JSON 格式无效",
"xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.title": "高级规则",
"xpack.enterpriseSearch.content.indices.connectorScheduling.page.sync.label": "同步",
From 02009d7f4887b53c103a308b5a81c59f12845433 Mon Sep 17 00:00:00 2001
From: Justin Kambic
Date: Mon, 11 Mar 2024 13:35:44 -0400
Subject: [PATCH 021/100] [Synthetics] Fix Certificates page for monitors that
have status alert disabled (#178336)
## Summary
Resolves #178334.
We discovered that we were accidentally looking at the wrong field when
filtering monitors for the TLS page in Synthetics.
This patch switches to the right field.
### After
### Before
## Testing
There are detailed repro instructions on the linked issue. On `main`,
you can follow those instructions (create an http monitor with status
alerts disabled, navigate to TLS page, see no data). Then `checkout`
this PR and refresh the page, you should see your TLS data.
---
.../synthetics/server/routes/certs/get_certificates.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts
index 405863865757..5136b3cb3a43 100644
--- a/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts
+++ b/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts
@@ -14,7 +14,7 @@ import {
import { monitorAttributes } from '../../../common/types/saved_objects';
import { SYNTHETICS_API_URLS } from '../../../common/constants';
import { CertResult, GetCertsParams } from '../../../common/runtime_types';
-import { AlertConfigKey } from '../../../common/constants/monitor_management';
+import { ConfigKey } from '../../../common/constants/monitor_management';
import { getSyntheticsCerts } from '../../queries/get_certs';
export const getSyntheticsCertsRoute: SyntheticsRestApiRouteFactory<
@@ -45,7 +45,7 @@ export const getSyntheticsCertsRoute: SyntheticsRestApiRouteFactory<
const monitors = await getAllMonitors({
soClient: savedObjectsClient,
- filter: `${monitorAttributes}.${AlertConfigKey.STATUS_ENABLED}: true`,
+ filter: `${monitorAttributes}.${ConfigKey.ENABLED}: true`,
});
if (monitors.length === 0) {
From 85e6af36229a559d0c3ed704e2ddbaefdec5d091 Mon Sep 17 00:00:00 2001
From: Jon
Date: Mon, 11 Mar 2024 19:12:38 +0100
Subject: [PATCH 022/100] [ci] Update APM transaction sample rate back to 0.1
(#178419)
https://github.com/elastic/kibana/pull/177727 updated the endpoint used
to collect APM metrics from CI to a project based deployment. As part of
the change we scaled back the sampling rate to monitor stability. This
reverts the sampling rate change.
---
.buildkite/scripts/common/env.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.buildkite/scripts/common/env.sh b/.buildkite/scripts/common/env.sh
index 90ec7d3bf0e7..5823490ccab5 100755
--- a/.buildkite/scripts/common/env.sh
+++ b/.buildkite/scripts/common/env.sh
@@ -69,7 +69,7 @@ export FORCE_COLOR=1
export TEST_BROWSER_HEADLESS=1
export ELASTIC_APM_ENVIRONMENT=ci
-export ELASTIC_APM_TRANSACTION_SAMPLE_RATE=0.01
+export ELASTIC_APM_TRANSACTION_SAMPLE_RATE=0.1
if is_pr; then
if is_pr_with_label "ci:collect-apm"; then
From 4b87694b7376c864febb51557bffe12499739a3c Mon Sep 17 00:00:00 2001
From: Shahzad
Date: Mon, 11 Mar 2024 19:26:41 +0100
Subject: [PATCH 023/100] [SLOs] Add params to summary via ingest pipeline
(#178223)
## Summary
Add params to summary via ingest pipeline !!
We need params on summary document for Federated view !!
Also added `createdAt`, `updatedAt` and `kibanaUrl` info !!
---
.../slo_summary_mappings_template.ts | 1 +
.../slo_summary_pipeline_template.ts | 34 ++++++++++++++++++-
.../observability/server/routes/slo/route.ts | 18 +++++++---
.../slo/__snapshots__/create_slo.test.ts.snap | 32 +++++++++++++++++
.../slo/__snapshots__/reset_slo.test.ts.snap | 33 ++++++++++++++++++
.../server/services/slo/create_slo.test.ts | 6 +++-
.../server/services/slo/create_slo.ts | 12 ++++---
.../server/services/slo/reset_slo.test.ts | 9 +++--
.../server/services/slo/reset_slo.ts | 10 ++++--
.../server/services/slo/update_slo.test.ts | 9 +++--
.../server/services/slo/update_slo.ts | 13 ++++---
11 files changed, 155 insertions(+), 22 deletions(-)
diff --git a/x-pack/plugins/observability_solution/observability/server/assets/component_templates/slo_summary_mappings_template.ts b/x-pack/plugins/observability_solution/observability/server/assets/component_templates/slo_summary_mappings_template.ts
index f16155792dc5..5b3ba4b0965a 100644
--- a/x-pack/plugins/observability_solution/observability/server/assets/component_templates/slo_summary_mappings_template.ts
+++ b/x-pack/plugins/observability_solution/observability/server/assets/component_templates/slo_summary_mappings_template.ts
@@ -74,6 +74,7 @@ export const getSLOSummaryMappingsTemplate = (
type: 'keyword',
},
indicator: {
+ dynamic: false,
properties: {
type: {
type: 'keyword',
diff --git a/x-pack/plugins/observability_solution/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts b/x-pack/plugins/observability_solution/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts
index d279c925f86b..627407104a6e 100644
--- a/x-pack/plugins/observability_solution/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts
+++ b/x-pack/plugins/observability_solution/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts
@@ -6,10 +6,16 @@
*/
import { timeslicesBudgetingMethodSchema } from '@kbn/slo-schema';
+import { IngestPutPipelineRequest } from '@elastic/elasticsearch/lib/api/types';
+import { IBasePath } from '@kbn/core-http-server';
import { getSLOSummaryPipelineId, SLO_RESOURCES_VERSION } from '../../../common/slo/constants';
import { SLO } from '../../domain/models';
-export const getSLOSummaryPipelineTemplate = (slo: SLO, spaceId: string) => {
+export const getSLOSummaryPipelineTemplate = (
+ slo: SLO,
+ spaceId: string,
+ basePath: IBasePath
+): IngestPutPipelineRequest => {
const errorBudgetEstimated =
slo.budgetingMethod === 'occurrences' && slo.timeWindow.type === 'calendarAligned';
@@ -160,6 +166,32 @@ export const getSLOSummaryPipelineTemplate = (slo: SLO, spaceId: string) => {
value: spaceId,
},
},
+ {
+ set: {
+ field: 'slo.indicator.params',
+ value: slo.indicator.params,
+ ignore_failure: true,
+ },
+ },
+ {
+ set: {
+ field: 'slo.createdAt',
+ value: slo.createdAt,
+ },
+ },
+ {
+ set: {
+ field: 'slo.updatedAt',
+ value: slo.updatedAt,
+ },
+ },
+ {
+ set: {
+ field: 'kibanaUrl',
+ value: basePath.publicBaseUrl ?? '',
+ ignore_failure: true,
+ },
+ },
],
_meta: {
description: `Ingest pipeline for SLO summary data [id: ${slo.id}, revision: ${slo.revision}]`,
diff --git a/x-pack/plugins/observability_solution/observability/server/routes/slo/route.ts b/x-pack/plugins/observability_solution/observability/server/routes/slo/route.ts
index 1c8340617648..8e0432ab05ba 100644
--- a/x-pack/plugins/observability_solution/observability/server/routes/slo/route.ts
+++ b/x-pack/plugins/observability_solution/observability/server/routes/slo/route.ts
@@ -94,6 +94,7 @@ const createSLORoute = createObservabilityServerRoute({
(await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default';
const esClient = (await context.core).elasticsearch.client.asCurrentUser;
+ const basePath = dependencies.pluginsSetup.core.http.basePath;
const soClient = (await context.core).savedObjects.client;
const repository = new KibanaSavedObjectsSLORepository(soClient, logger);
const transformManager = new DefaultTransformManager(
@@ -114,7 +115,8 @@ const createSLORoute = createObservabilityServerRoute({
transformManager,
summaryTransformManager,
logger,
- spaceId
+ spaceId,
+ basePath
);
const response = await createSLO.execute(params.body);
@@ -135,7 +137,7 @@ const inspectSLORoute = createObservabilityServerRoute({
const spaceId =
(await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default';
-
+ const basePath = dependencies.pluginsSetup.core.http.basePath;
const esClient = (await context.core).elasticsearch.client.asCurrentUser;
const soClient = (await context.core).savedObjects.client;
const repository = new KibanaSavedObjectsSLORepository(soClient, logger);
@@ -157,7 +159,8 @@ const inspectSLORoute = createObservabilityServerRoute({
transformManager,
summaryTransformManager,
logger,
- spaceId
+ spaceId,
+ basePath
);
return createSLO.inspect(params.body);
@@ -176,6 +179,8 @@ const updateSLORoute = createObservabilityServerRoute({
const spaceId =
(await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default';
+
+ const basePath = dependencies.pluginsSetup.core.http.basePath;
const esClient = (await context.core).elasticsearch.client.asCurrentUser;
const soClient = (await context.core).savedObjects.client;
@@ -198,7 +203,8 @@ const updateSLORoute = createObservabilityServerRoute({
summaryTransformManager,
esClient,
logger,
- spaceId
+ spaceId,
+ basePath
);
const response = await updateSLO.execute(params.path.id, params.body);
@@ -360,6 +366,7 @@ const resetSLORoute = createObservabilityServerRoute({
(await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default';
const soClient = (await context.core).savedObjects.client;
const esClient = (await context.core).elasticsearch.client.asCurrentUser;
+ const basePath = dependencies.pluginsSetup.core.http.basePath;
const repository = new KibanaSavedObjectsSLORepository(soClient, logger);
const transformManager = new DefaultTransformManager(
@@ -380,7 +387,8 @@ const resetSLORoute = createObservabilityServerRoute({
transformManager,
summaryTransformManager,
logger,
- spaceId
+ spaceId,
+ basePath
);
const response = await resetSLO.execute(params.path.id);
diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap b/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap
index 7c0ea00b409c..0633b94da7bd 100644
--- a/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap
+++ b/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap
@@ -133,6 +133,38 @@ Array [
"value": "some-space",
},
},
+ Object {
+ "set": Object {
+ "field": "slo.indicator.params",
+ "ignore_failure": true,
+ "value": Object {
+ "environment": "irrelevant",
+ "index": "metrics-apm*",
+ "service": "irrelevant",
+ "transactionName": "irrelevant",
+ "transactionType": "irrelevant",
+ },
+ },
+ },
+ Object {
+ "set": Object {
+ "field": "slo.createdAt",
+ "value": 2024-01-01T00:00:00.000Z,
+ },
+ },
+ Object {
+ "set": Object {
+ "field": "slo.updatedAt",
+ "value": 2024-01-01T00:00:00.000Z,
+ },
+ },
+ Object {
+ "set": Object {
+ "field": "kibanaUrl",
+ "ignore_failure": true,
+ "value": "http://myhost.com/mock-server-basepath",
+ },
+ },
],
},
]
diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap b/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap
index d70d8ebfc007..aa8eb458184a 100644
--- a/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap
+++ b/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap
@@ -331,6 +331,39 @@ exports[`ResetSLO resets all associated resources 8`] = `
"value": "some-space",
},
},
+ Object {
+ "set": Object {
+ "field": "slo.indicator.params",
+ "ignore_failure": true,
+ "value": Object {
+ "environment": "irrelevant",
+ "index": "metrics-apm*",
+ "service": "irrelevant",
+ "threshold": 500,
+ "transactionName": "irrelevant",
+ "transactionType": "irrelevant",
+ },
+ },
+ },
+ Object {
+ "set": Object {
+ "field": "slo.createdAt",
+ "value": 2023-01-01T00:00:00.000Z,
+ },
+ },
+ Object {
+ "set": Object {
+ "field": "slo.updatedAt",
+ "value": 2023-01-01T00:00:00.000Z,
+ },
+ },
+ Object {
+ "set": Object {
+ "field": "kibanaUrl",
+ "ignore_failure": true,
+ "value": "http://myhost.com/mock-server-basepath",
+ },
+ },
],
},
],
diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.test.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.test.ts
index fe8de00589db..8f6bee0fe34c 100644
--- a/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.test.ts
+++ b/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.test.ts
@@ -8,6 +8,7 @@
import {
ElasticsearchClientMock,
elasticsearchServiceMock,
+ httpServiceMock,
loggingSystemMock,
} from '@kbn/core/server/mocks';
import { MockedLogger } from '@kbn/logging-mocks';
@@ -30,6 +31,8 @@ describe('CreateSLO', () => {
let mockSummaryTransformManager: jest.Mocked;
let createSLO: CreateSLO;
+ jest.useFakeTimers().setSystemTime(new Date('2024-01-01'));
+
beforeEach(() => {
esClientMock = elasticsearchServiceMock.createElasticsearchClient();
loggerMock = loggingSystemMock.createLogger();
@@ -42,7 +45,8 @@ describe('CreateSLO', () => {
mockTransformManager,
mockSummaryTransformManager,
loggerMock,
- 'some-space'
+ 'some-space',
+ httpServiceMock.createStartContract().basePath
);
});
diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.ts
index 89e8c7165f39..f46b868b4607 100644
--- a/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.ts
+++ b/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { ElasticsearchClient, Logger } from '@kbn/core/server';
+import { ElasticsearchClient, IBasePath, Logger } from '@kbn/core/server';
import { ALL_VALUE, CreateSLOParams, CreateSLOResponse } from '@kbn/slo-schema';
import { v4 as uuidv4 } from 'uuid';
import { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
@@ -31,7 +31,8 @@ export class CreateSLO {
private transformManager: TransformManager,
private summaryTransformManager: TransformManager,
private logger: Logger,
- private spaceId: string
+ private spaceId: string,
+ private basePath: IBasePath
) {}
public async execute(params: CreateSLOParams): Promise {
@@ -46,7 +47,10 @@ export class CreateSLO {
await this.transformManager.install(slo);
await this.transformManager.start(rollupTransformId);
await retryTransientEsErrors(
- () => this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(slo, this.spaceId)),
+ () =>
+ this.esClient.ingest.putPipeline(
+ getSLOSummaryPipelineTemplate(slo, this.spaceId, this.basePath)
+ ),
{ logger: this.logger }
);
@@ -95,7 +99,7 @@ export class CreateSLO {
validateSLO(slo);
const rollUpTransform = this.transformManager.inspect(slo);
- const pipeline = getSLOSummaryPipelineTemplate(slo, this.spaceId);
+ const pipeline = getSLOSummaryPipelineTemplate(slo, this.spaceId, this.basePath);
const summaryTransform = this.summaryTransformManager.inspect(slo);
diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.test.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.test.ts
index feae6695fbd3..775520192742 100644
--- a/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.test.ts
+++ b/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.test.ts
@@ -6,7 +6,11 @@
*/
import { ElasticsearchClient } from '@kbn/core/server';
-import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks';
+import {
+ elasticsearchServiceMock,
+ httpServiceMock,
+ loggingSystemMock,
+} from '@kbn/core/server/mocks';
import { MockedLogger } from '@kbn/logging-mocks';
import { SLO_MODEL_VERSION } from '../../../common/slo/constants';
@@ -42,7 +46,8 @@ describe('ResetSLO', () => {
mockTransformManager,
mockSummaryTransformManager,
loggerMock,
- 'some-space'
+ 'some-space',
+ httpServiceMock.createStartContract().basePath
);
jest.useFakeTimers().setSystemTime(TEST_DATE);
});
diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.ts
index 8c4a37476197..9fabd255b70d 100644
--- a/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.ts
+++ b/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { ElasticsearchClient, Logger } from '@kbn/core/server';
+import { ElasticsearchClient, IBasePath, Logger } from '@kbn/core/server';
import { resetSLOResponseSchema } from '@kbn/slo-schema';
import {
getSLOSummaryPipelineId,
@@ -29,7 +29,8 @@ export class ResetSLO {
private transformManager: TransformManager,
private summaryTransformManager: TransformManager,
private logger: Logger,
- private spaceId: string
+ private spaceId: string,
+ private basePath: IBasePath
) {}
public async execute(sloId: string) {
@@ -49,7 +50,10 @@ export class ResetSLO {
await this.transformManager.install(slo);
await this.transformManager.start(rollupTransformId);
await retryTransientEsErrors(
- () => this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(slo, this.spaceId)),
+ () =>
+ this.esClient.ingest.putPipeline(
+ getSLOSummaryPipelineTemplate(slo, this.spaceId, this.basePath)
+ ),
{ logger: this.logger }
);
diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.test.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.test.ts
index a8642cfa921f..d93e4549ca3d 100644
--- a/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.test.ts
+++ b/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.test.ts
@@ -6,7 +6,11 @@
*/
import { ElasticsearchClient } from '@kbn/core/server';
-import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks';
+import {
+ elasticsearchServiceMock,
+ httpServiceMock,
+ loggingSystemMock,
+} from '@kbn/core/server/mocks';
import { MockedLogger } from '@kbn/logging-mocks';
import { UpdateSLOParams } from '@kbn/slo-schema';
import { cloneDeep, omit, pick } from 'lodash';
@@ -54,7 +58,8 @@ describe('UpdateSLO', () => {
mockSummaryTransformManager,
mockEsClient,
loggerMock,
- 'some-space'
+ 'some-space',
+ httpServiceMock.createStartContract().basePath
);
});
diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.ts
index 1a73d54decbe..ac00fa9daa21 100644
--- a/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.ts
+++ b/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { ElasticsearchClient, Logger } from '@kbn/core/server';
+import { ElasticsearchClient, IBasePath, Logger } from '@kbn/core/server';
import { UpdateSLOParams, UpdateSLOResponse, updateSLOResponseSchema } from '@kbn/slo-schema';
import { isEqual, pick } from 'lodash';
import {
@@ -31,7 +31,8 @@ export class UpdateSLO {
private summaryTransformManager: TransformManager,
private esClient: ElasticsearchClient,
private logger: Logger,
- private spaceId: string
+ private spaceId: string,
+ private basePath: IBasePath
) {}
public async execute(sloId: string, params: UpdateSLOParams): Promise {
@@ -66,7 +67,9 @@ export class UpdateSLO {
// At this point, we still need to update the summary pipeline to include the changes (name, desc, tags, ...) in the summary index
await retryTransientEsErrors(
() =>
- this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(updatedSlo, this.spaceId)),
+ this.esClient.ingest.putPipeline(
+ getSLOSummaryPipelineTemplate(updatedSlo, this.spaceId, this.basePath)
+ ),
{ logger: this.logger }
);
@@ -82,7 +85,9 @@ export class UpdateSLO {
await retryTransientEsErrors(
() =>
- this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(updatedSlo, this.spaceId)),
+ this.esClient.ingest.putPipeline(
+ getSLOSummaryPipelineTemplate(updatedSlo, this.spaceId, this.basePath)
+ ),
{ logger: this.logger }
);
From 93ddbe259e65b3742050a0de806d3478736b34a3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Yulia=20=C4=8Cech?=
<6585477+yuliacech@users.noreply.github.com>
Date: Mon, 11 Mar 2024 19:29:27 +0100
Subject: [PATCH 024/100] [Index Management] Fix save error for deprecated
index/component templates (#178316)
## Summary
Fixes https://github.com/elastic/kibana/issues/178021
This PR adds the property "deprecated" to allowed parameters for the
routes to update index templates and component templates.
### How to test
1. Create a deprecated index template and a deprecated component
template
```
PUT _index_template/test
{
"template": {},
"index_patterns": [
"test"
],
"data_stream": {},
"allow_auto_create": false,
"deprecated": true
}
PUT _component_template/test
{
"template": {},
"deprecated": true
}
```
2. Navigate to Index Management -> Index/component templates
3. Open and save created index/component templates
4. Make sure that both templates are saved and are still marked as
deprecated.
### 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#kibana-release-notes-process)
---
.../component_template_serialization.test.ts | 2 +-
.../lib/component_template_serialization.ts | 5 ++--
.../common/lib/template_serialization.ts | 2 ++
.../common/types/component_templates.ts | 1 -
.../component_template_details.test.ts | 2 +-
.../component_template_edit.test.tsx | 2 +-
.../component_template_details.tsx | 2 +-
.../component_template_edit.tsx | 2 +-
.../template_form/template_form.tsx | 1 +
.../register_update_route.ts | 4 ++-
.../component_templates/schema_validation.ts | 1 +
.../routes/api/templates/validate_schemas.ts | 1 +
.../index_management/component_templates.ts | 30 ++++++++++++++++++-
.../management/index_management/templates.ts | 15 ++++++++++
.../index_component_templates.ts | 1 -
15 files changed, 60 insertions(+), 11 deletions(-)
diff --git a/x-pack/plugins/index_management/common/lib/component_template_serialization.test.ts b/x-pack/plugins/index_management/common/lib/component_template_serialization.test.ts
index 84af60a41e2f..00d848fb6568 100644
--- a/x-pack/plugins/index_management/common/lib/component_template_serialization.test.ts
+++ b/x-pack/plugins/index_management/common/lib/component_template_serialization.test.ts
@@ -63,7 +63,7 @@ describe('Component template serialization', () => {
]
)
).toEqual({
- isDeprecated: false,
+ deprecated: undefined,
name: 'my_component_template',
version: 1,
_meta: {
diff --git a/x-pack/plugins/index_management/common/lib/component_template_serialization.ts b/x-pack/plugins/index_management/common/lib/component_template_serialization.ts
index bffa1a2ad224..b1f2aac8a302 100644
--- a/x-pack/plugins/index_management/common/lib/component_template_serialization.ts
+++ b/x-pack/plugins/index_management/common/lib/component_template_serialization.ts
@@ -60,7 +60,7 @@ export function deserializeComponentTemplate(
template,
version,
_meta,
- isDeprecated: Boolean(deprecated === true),
+ deprecated,
_kbnMeta: {
usedBy: indexTemplatesToUsedBy[name] || [],
isManaged: Boolean(_meta?.managed === true),
@@ -95,11 +95,12 @@ export function deserializeComponentTemplateList(
export function serializeComponentTemplate(
componentTemplateDeserialized: ComponentTemplateDeserialized
): ComponentTemplateSerialized {
- const { version, template, _meta } = componentTemplateDeserialized;
+ const { version, template, _meta, deprecated } = componentTemplateDeserialized;
return {
version,
template,
_meta,
+ deprecated,
};
}
diff --git a/x-pack/plugins/index_management/common/lib/template_serialization.ts b/x-pack/plugins/index_management/common/lib/template_serialization.ts
index 80a5514969f5..7467930e6f01 100644
--- a/x-pack/plugins/index_management/common/lib/template_serialization.ts
+++ b/x-pack/plugins/index_management/common/lib/template_serialization.ts
@@ -27,6 +27,7 @@ export function serializeTemplate(templateDeserialized: TemplateDeserialized): T
dataStream,
_meta,
allowAutoCreate,
+ deprecated,
} = templateDeserialized;
return {
@@ -39,6 +40,7 @@ export function serializeTemplate(templateDeserialized: TemplateDeserialized): T
ignore_missing_component_templates: ignoreMissingComponentTemplates,
allow_auto_create: allowAutoCreate,
_meta,
+ deprecated,
};
}
diff --git a/x-pack/plugins/index_management/common/types/component_templates.ts b/x-pack/plugins/index_management/common/types/component_templates.ts
index 8eb39dec1da9..be285170f668 100644
--- a/x-pack/plugins/index_management/common/types/component_templates.ts
+++ b/x-pack/plugins/index_management/common/types/component_templates.ts
@@ -25,7 +25,6 @@ export interface ComponentTemplateSerialized {
export interface ComponentTemplateDeserialized extends ComponentTemplateSerialized {
name: string;
- isDeprecated?: boolean;
_kbnMeta: {
usedBy: string[];
isManaged: boolean;
diff --git a/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_details.test.ts b/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_details.test.ts
index 203f162bf3a4..49b4e1b201a1 100644
--- a/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_details.test.ts
+++ b/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_details.test.ts
@@ -15,7 +15,7 @@ const { setup } = pageHelpers.componentTemplateDetails;
const COMPONENT_TEMPLATE: ComponentTemplateDeserialized = {
name: 'comp-1',
- isDeprecated: true,
+ deprecated: true,
template: {
mappings: { properties: { ip_address: { type: 'ip' } } },
aliases: { mydata: {} },
diff --git a/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_edit.test.tsx b/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_edit.test.tsx
index d113c66302ec..555e4030b92c 100644
--- a/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_edit.test.tsx
+++ b/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_edit.test.tsx
@@ -74,7 +74,7 @@ describe('', () => {
const COMPONENT_TEMPLATE_NAME = 'comp-1';
const COMPONENT_TEMPLATE_TO_EDIT = {
name: COMPONENT_TEMPLATE_NAME,
- isDeprecated: true,
+ deprecated: true,
template: {
settings: { number_of_shards: 1 },
},
diff --git a/x-pack/plugins/index_management/public/application/components/component_templates/component_template_details/component_template_details.tsx b/x-pack/plugins/index_management/public/application/components/component_templates/component_template_details/component_template_details.tsx
index 3f053b9aa3fd..60324997ab11 100644
--- a/x-pack/plugins/index_management/public/application/components/component_templates/component_template_details/component_template_details.tsx
+++ b/x-pack/plugins/index_management/public/application/components/component_templates/component_template_details/component_template_details.tsx
@@ -122,7 +122,7 @@ export const ComponentTemplateDetailsFlyoutContent: React.FunctionComponent
diff --git a/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_edit/component_template_edit.tsx b/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_edit/component_template_edit.tsx
index 220acb812121..aa5cc1637aab 100644
--- a/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_edit/component_template_edit.tsx
+++ b/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_edit/component_template_edit.tsx
@@ -125,7 +125,7 @@ export const ComponentTemplateEdit: React.FunctionComponent
- {componentTemplate?.isDeprecated && (
+ {componentTemplate?.deprecated && (
<>
{
const { client } = (await context.core).elasticsearch;
const { name } = request.params;
- const { template, version, _meta } = request.body;
+ const { template, version, _meta, deprecated } = request.body;
try {
// Verify component exists; ES will throw 404 if not
@@ -43,6 +43,8 @@ export const registerUpdateRoute = ({
template: template as estypes.IndicesIndexState,
version,
_meta,
+ // @ts-expect-error deprecated property is not yet part of the API types
+ deprecated,
},
});
diff --git a/x-pack/plugins/index_management/server/routes/api/component_templates/schema_validation.ts b/x-pack/plugins/index_management/server/routes/api/component_templates/schema_validation.ts
index 586e9db91102..58d593d54345 100644
--- a/x-pack/plugins/index_management/server/routes/api/component_templates/schema_validation.ts
+++ b/x-pack/plugins/index_management/server/routes/api/component_templates/schema_validation.ts
@@ -26,4 +26,5 @@ export const componentTemplateSchema = schema.object({
usedBy: schema.arrayOf(schema.string()),
isManaged: schema.boolean(),
}),
+ deprecated: schema.maybe(schema.boolean()),
});
diff --git a/x-pack/plugins/index_management/server/routes/api/templates/validate_schemas.ts b/x-pack/plugins/index_management/server/routes/api/templates/validate_schemas.ts
index 1f5c5e2a3b82..792e0c75c9b2 100644
--- a/x-pack/plugins/index_management/server/routes/api/templates/validate_schemas.ts
+++ b/x-pack/plugins/index_management/server/routes/api/templates/validate_schemas.ts
@@ -49,4 +49,5 @@ export const templateSchema = schema.object({
hasDatastream: schema.maybe(schema.boolean()),
isLegacy: schema.maybe(schema.boolean()),
}),
+ deprecated: schema.maybe(schema.boolean()),
});
diff --git a/x-pack/test/api_integration/apis/management/index_management/component_templates.ts b/x-pack/test/api_integration/apis/management/index_management/component_templates.ts
index 3f2f9310faa0..bb37e04941b7 100644
--- a/x-pack/test/api_integration/apis/management/index_management/component_templates.ts
+++ b/x-pack/test/api_integration/apis/management/index_management/component_templates.ts
@@ -104,7 +104,6 @@ export default function ({ getService }: FtrProviderContext) {
const { body } = await getOneComponentTemplate(COMPONENT_NAME).expect(200);
expect(body).to.eql({
- isDeprecated: false,
name: COMPONENT_NAME,
...COMPONENT,
_kbnMeta: {
@@ -282,6 +281,35 @@ export default function ({ getService }: FtrProviderContext) {
},
});
});
+
+ it('should allow a deprecated component template to be updated', async () => {
+ const deprecatedTemplateName = 'deprecated_component_template';
+ const deprecatedTemplate = {
+ template: {},
+ deprecated: true,
+ };
+ try {
+ await addComponentTemplate(
+ { body: deprecatedTemplate, name: deprecatedTemplateName },
+ CACHE_TEMPLATES
+ );
+ } catch (err) {
+ log.debug('[Setup error] Error creating component template');
+ throw err;
+ }
+ const { body } = await updateComponentTemplate(deprecatedTemplateName, {
+ ...deprecatedTemplate,
+ version: 1,
+ _kbnMeta: {
+ usedBy: [],
+ isManaged: false,
+ },
+ }).expect(200);
+
+ expect(body).to.eql({
+ acknowledged: true,
+ });
+ });
});
describe('Delete', () => {
diff --git a/x-pack/test/api_integration/apis/management/index_management/templates.ts b/x-pack/test/api_integration/apis/management/index_management/templates.ts
index 6d0e79993d04..23fbee0a9446 100644
--- a/x-pack/test/api_integration/apis/management/index_management/templates.ts
+++ b/x-pack/test/api_integration/apis/management/index_management/templates.ts
@@ -361,6 +361,21 @@ export default function ({ getService }: FtrProviderContext) {
// one of the item of the cause array should point to our script
expect(body.attributes.causes.join(',')).contain('"hello with error');
});
+
+ it('should update a deprecated index template', async () => {
+ const templateName = `deprecated_template-${getRandomString()}`;
+ const indexTemplate: TemplateDeserialized = {
+ _kbnMeta: { hasDatastream: false, type: 'default' },
+ name: templateName,
+ indexPatterns: [getRandomString()],
+ template: {},
+ deprecated: true,
+ };
+
+ await createTemplate(indexTemplate).expect(200);
+
+ await updateTemplate({ ...indexTemplate }, templateName).expect(200);
+ });
});
describe('delete', () => {
diff --git a/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_component_templates.ts b/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_component_templates.ts
index dba49769ed78..276c940c54c7 100644
--- a/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_component_templates.ts
+++ b/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_component_templates.ts
@@ -119,7 +119,6 @@ export default function ({ getService }: FtrProviderContext) {
const { body } = await getOneComponentTemplate(COMPONENT_NAME).expect(200);
expect(body).to.eql({
- isDeprecated: false,
name: COMPONENT_NAME,
...COMPONENT,
_kbnMeta: {
From d9a151de6b8b4a44fd2b5a0f48da1bf65512a795 Mon Sep 17 00:00:00 2001
From: Janki Salvi <117571355+js-jankisalvi@users.noreply.github.com>
Date: Mon, 11 Mar 2024 19:31:57 +0100
Subject: [PATCH 025/100] [Actions] [ServiceNow] Allow to test close incident
for serviceNow (#177026)
## Summary
Resolves [#175003](https://github.com/elastic/kibana/issues/175003)
This PR allows to test `closeIncident` subAction in ServiceNow connector
test tab.
https://github.com/elastic/kibana/assets/117571355/bbe04be3-ec91-4072-8bda-1e26423fe302
### 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
---------
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
.../lib/servicenow/translations.ts | 21 ++++
.../servicenow_itsm_params.test.tsx | 109 ++++++++++++++++-
.../servicenow_itsm_params.tsx | 111 ++++++++++++++----
.../connector_types/servicenow_itsm/types.ts | 5 +
4 files changed, 220 insertions(+), 26 deletions(-)
diff --git a/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts b/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts
index 998f4540cfd4..547e641c019d 100644
--- a/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts
+++ b/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts
@@ -391,3 +391,24 @@ export const REQUIRED_LABEL = i18n.translate(
defaultMessage: 'Required',
}
);
+
+export const EVENT_ACTION_TRIGGER = i18n.translate(
+ 'xpack.stackConnectors.components.serviceNow.eventActionTriggerOptionLabel',
+ {
+ defaultMessage: 'Trigger',
+ }
+);
+
+export const EVENT_ACTION_RESOLVE = i18n.translate(
+ 'xpack.stackConnectors.components.serviceNow.eventActionResolveOptionLabel',
+ {
+ defaultMessage: 'Resolve',
+ }
+);
+
+export const EVENT_ACTION_LABEL = i18n.translate(
+ 'xpack.stackConnectors.components.serviceNowITSM.eventActionFieldLabel',
+ {
+ defaultMessage: 'Event action',
+ }
+);
diff --git a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.test.tsx
index 1566721386ba..e0eb4524341d 100644
--- a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.test.tsx
+++ b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.test.tsx
@@ -7,13 +7,13 @@
import React from 'react';
import { mountWithIntl } from '@kbn/test-jest-helpers';
-import { act } from '@testing-library/react';
+import { act, waitFor } from '@testing-library/react';
+import { merge } from 'lodash';
-import { ActionConnector } from '@kbn/triggers-actions-ui-plugin/public/types';
+import { ActionConnector, ActionConnectorMode } from '@kbn/triggers-actions-ui-plugin/public/types';
import { useGetChoices } from '../lib/servicenow/use_get_choices';
import ServiceNowITSMParamsFields from './servicenow_itsm_params';
import { Choice } from '../lib/servicenow/types';
-import { merge } from 'lodash';
import { ACTION_GROUP_RECOVERED } from '../lib/servicenow/helpers';
jest.mock('../lib/servicenow/use_get_choices');
@@ -59,6 +59,8 @@ const defaultProps = {
editAction,
index: 0,
messageVariables: [],
+ selectedActionGroupId: 'trigger',
+ executionMode: ActionConnectorMode.ActionForm,
};
const useGetChoicesResponse = {
@@ -130,6 +132,7 @@ describe('ServiceNowITSMParamsFields renders', () => {
onChoices(useGetChoicesResponse.choices);
});
wrapper.update();
+ expect(wrapper.find('[data-test-subj="eventActionSelect"]').exists()).toBeFalsy();
expect(wrapper.find('[data-test-subj="urgencySelect"]').exists()).toBeTruthy();
expect(wrapper.find('[data-test-subj="severitySelect"]').exists()).toBeTruthy();
expect(wrapper.find('[data-test-subj="impactSelect"]').exists()).toBeTruthy();
@@ -305,6 +308,8 @@ describe('ServiceNowITSMParamsFields renders', () => {
errors={{ ['subActionParams.incident.short_description']: [] }}
editAction={editAction}
index={0}
+ selectedActionGroupId={'trigger'}
+ executionMode={ActionConnectorMode.ActionForm}
/>
);
@@ -362,4 +367,102 @@ describe('ServiceNowITSMParamsFields renders', () => {
expect(wrapper.find('.euiFormErrorText').text()).toBe('correlation_id_error');
});
});
+
+ describe('Test form', () => {
+ const newDefaultProps = {
+ ...defaultProps,
+ executionMode: ActionConnectorMode.Test,
+ actionParams: {},
+ selectedActionGroupId: undefined,
+ };
+
+ test('renders event action dropdown correctly', () => {
+ const wrapper = mountWithIntl();
+ wrapper.update();
+ expect(wrapper.find('[data-test-subj="eventActionSelect"]').exists()).toBeTruthy();
+ expect(wrapper.find('[data-test-subj="eventActionSelect"]').first().prop('options')).toEqual([
+ {
+ text: 'Trigger',
+ value: 'trigger',
+ },
+ {
+ text: 'Resolve',
+ value: 'resolve',
+ },
+ ]);
+ });
+
+ test('shows form for trigger action correctly', () => {
+ const changeEvent = { target: { value: 'trigger' } } as React.ChangeEvent;
+ const wrapper = mountWithIntl();
+
+ const theField = wrapper.find('[data-test-subj="eventActionSelect"]').first();
+ theField.prop('onChange')!(changeEvent);
+
+ expect(editAction.mock.calls[0][1]).toEqual('pushToService');
+
+ wrapper.update();
+
+ expect(wrapper.find('[data-test-subj="urgencySelect"]').exists()).toBeTruthy();
+ expect(wrapper.find('[data-test-subj="severitySelect"]').exists()).toBeTruthy();
+ expect(wrapper.find('[data-test-subj="impactSelect"]').exists()).toBeTruthy();
+ expect(wrapper.find('[data-test-subj="categorySelect"]').exists()).toBeTruthy();
+ expect(wrapper.find('[data-test-subj="short_descriptionInput"]').exists()).toBeTruthy();
+ expect(wrapper.find('[data-test-subj="correlation_idInput"]').exists()).toBeTruthy();
+ expect(wrapper.find('[data-test-subj="correlation_displayInput"]').exists()).toBeTruthy();
+ expect(wrapper.find('[data-test-subj="descriptionTextArea"]').exists()).toBeTruthy();
+ expect(wrapper.find('[data-test-subj="commentsTextArea"]').exists()).toBeTruthy();
+ });
+
+ test('shows form for resolve action correctly', () => {
+ const changeEvent = { target: { value: 'resolve' } } as React.ChangeEvent;
+ const wrapper = mountWithIntl();
+
+ expect(editAction.mock.calls[0][1]).toEqual('pushToService');
+
+ const theField = wrapper.find('[data-test-subj="eventActionSelect"]').first();
+ theField.prop('onChange')!(changeEvent);
+
+ waitFor(() => {
+ expect(editAction.mock.calls[0][1]).toEqual('closeIncident');
+ });
+
+ wrapper.update();
+
+ expect(wrapper.find('[data-test-subj="correlation_idInput"]').exists()).toBeTruthy();
+ expect(wrapper.find('[data-test-subj="urgencySelect"]').exists()).toBeFalsy();
+ expect(wrapper.find('[data-test-subj="severitySelect"]').exists()).toBeFalsy();
+ expect(wrapper.find('[data-test-subj="impactSelect"]').exists()).toBeFalsy();
+ expect(wrapper.find('[data-test-subj="categorySelect"]').exists()).toBeFalsy();
+ expect(wrapper.find('[data-test-subj="subcategorySelect"]').exists()).toBeFalsy();
+ expect(wrapper.find('[data-test-subj="short_descriptionInput"]').exists()).toBeFalsy();
+ expect(wrapper.find('[data-test-subj="correlation_displayInput"]').exists()).toBeFalsy();
+ expect(wrapper.find('[data-test-subj="descriptionTextArea"]').exists()).toBeFalsy();
+ expect(wrapper.find('[data-test-subj="commentsTextArea"]').exists()).toBeFalsy();
+ });
+
+ test('resets form fields on action change', () => {
+ const changeEvent = { target: { value: 'resolve' } } as React.ChangeEvent;
+ const wrapper = mountWithIntl();
+
+ const correlationIdField = wrapper.find('input[data-test-subj="correlation_idInput"]');
+
+ correlationIdField.simulate('change', {
+ target: { value: 'updated correlation id' },
+ });
+
+ waitFor(() => {
+ expect(correlationIdField.contains('updated correlation id')).toBe(true);
+ });
+
+ const theField = wrapper.find('[data-test-subj="eventActionSelect"]').first();
+ theField.prop('onChange')!(changeEvent);
+
+ wrapper.update();
+
+ waitFor(() => {
+ expect(correlationIdField.contains('')).toBe(true);
+ });
+ });
+ });
});
diff --git a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.tsx
index 8e1bf021976b..2c3ebc080593 100644
--- a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.tsx
+++ b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.tsx
@@ -6,6 +6,7 @@
*/
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
+import { isEmpty } from 'lodash';
import {
EuiFormRow,
EuiSelect,
@@ -17,14 +18,14 @@ import {
EuiLink,
} from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
-import type { ActionParamsProps } from '@kbn/triggers-actions-ui-plugin/public';
+import { ActionConnectorMode, ActionParamsProps } from '@kbn/triggers-actions-ui-plugin/public';
import {
TextAreaWithMessageVariables,
TextFieldWithMessageVariables,
useKibana,
} from '@kbn/triggers-actions-ui-plugin/public';
import { Choice, Fields } from '../lib/servicenow/types';
-import { ServiceNowITSMActionParams } from './types';
+import { ServiceNowITSMActionParams, EventAction } from './types';
import { useGetChoices } from '../lib/servicenow/use_get_choices';
import {
ACTION_GROUP_RECOVERED,
@@ -47,17 +48,10 @@ const defaultFields: Fields = {
const CorrelationIdField: React.FunctionComponent<
Pick, 'index' | 'messageVariables' | 'errors'> & {
correlationId: string | null;
- selectedActionGroupId?: string;
editSubActionProperty: (key: string, value: any) => void;
+ isRequired?: boolean;
}
-> = ({
- index,
- messageVariables,
- correlationId,
- editSubActionProperty,
- selectedActionGroupId,
- errors,
-}) => {
+> = ({ index, messageVariables, correlationId, editSubActionProperty, isRequired, errors }) => {
const { docLinks } = useKibana().services;
return (
0 &&
!correlationId &&
- selectedActionGroupId === ACTION_GROUP_RECOVERED
+ isRequired
}
helpText={
@@ -80,9 +74,7 @@ const CorrelationIdField: React.FunctionComponent<
}
labelAppend={
- {selectedActionGroupId !== ACTION_GROUP_RECOVERED
- ? i18n.OPTIONAL_LABEL
- : i18n.REQUIRED_LABEL}
+ {isRequired ? i18n.REQUIRED_LABEL : i18n.OPTIONAL_LABEL}
}
>
@@ -98,10 +90,22 @@ const CorrelationIdField: React.FunctionComponent<
);
};
+const eventActionOptions = [
+ {
+ value: EventAction.TRIGGER,
+ text: i18n.EVENT_ACTION_TRIGGER,
+ },
+ {
+ value: EventAction.RESOLVE,
+ text: i18n.EVENT_ACTION_RESOLVE,
+ },
+];
+
const ServiceNowParamsFields: React.FunctionComponent<
ActionParamsProps
> = (props) => {
const {
+ executionMode,
actionConnector,
actionParams,
editAction,
@@ -116,20 +120,40 @@ const ServiceNowParamsFields: React.FunctionComponent<
} = useKibana().services;
const isDeprecatedActionConnector = actionConnector?.isDeprecated;
+ const [choices, setChoices] = useState(defaultFields);
+ const [eventAction, setEventAction] = useState(EventAction.TRIGGER);
+
+ const isTestTriggerAction =
+ executionMode === ActionConnectorMode.Test && eventAction === EventAction.TRIGGER;
+ const isTestResolveAction =
+ executionMode === ActionConnectorMode.Test && eventAction === EventAction.RESOLVE;
const actionConnectorRef = useRef(actionConnector?.id ?? '');
+
+ const showAllIncidentDetails =
+ (selectedActionGroupId && selectedActionGroupId !== ACTION_GROUP_RECOVERED) ||
+ isTestTriggerAction;
+ const showOnlyCorrelationId =
+ (selectedActionGroupId && selectedActionGroupId === ACTION_GROUP_RECOVERED) ||
+ isTestResolveAction;
+
+ if (isTestTriggerAction && !actionParams.subAction) {
+ editAction('subAction', 'pushToService', index);
+ }
+
const { incident, comments } = useMemo(
() =>
actionParams.subActionParams ??
({
incident: {},
- comments: selectedActionGroupId !== ACTION_GROUP_RECOVERED ? [] : undefined,
+ comments:
+ selectedActionGroupId && selectedActionGroupId !== ACTION_GROUP_RECOVERED
+ ? []
+ : undefined,
} as unknown as ServiceNowITSMActionParams['subActionParams']),
[actionParams.subActionParams, selectedActionGroupId]
);
- const [choices, setChoices] = useState(defaultFields);
-
const editSubActionProperty = useCallback(
(key: string, value: any) => {
const newProps =
@@ -186,6 +210,24 @@ const ServiceNowParamsFields: React.FunctionComponent<
onSuccess: onChoicesSuccess,
});
+ const handleEventActionChange = useCallback(
+ (value: EventAction) => {
+ if (!value) {
+ return;
+ }
+
+ setEventAction(value);
+
+ if (value === EventAction.RESOLVE) {
+ editAction('subAction', 'closeIncident', index);
+ return;
+ }
+
+ editAction('subAction', 'pushToService', index);
+ },
+ [setEventAction, editAction, index]
+ );
+
useEffect(() => {
if (actionConnector != null && actionConnectorRef.current !== actionConnector.id) {
actionConnectorRef.current = actionConnector.id;
@@ -208,16 +250,38 @@ const ServiceNowParamsFields: React.FunctionComponent<
index
);
}
+
+ if (
+ (isTestResolveAction || isTestTriggerAction) &&
+ (!isEmpty(actionParams.subActionParams?.incident) ||
+ actionParams.subActionParams?.comments?.length)
+ ) {
+ editAction('subActionParams', { incident: {}, comments: undefined }, index);
+ return;
+ }
+
// eslint-disable-next-line react-hooks/exhaustive-deps
- }, [actionConnector]);
+ }, [actionConnector, isTestResolveAction, isTestTriggerAction]);
return (
<>
+ {executionMode === ActionConnectorMode.Test ? (
+
+ handleEventActionChange(e.target.value as EventAction)}
+ />
+
+ ) : null}
+
{i18n.INCIDENT}
- {selectedActionGroupId !== ACTION_GROUP_RECOVERED ? (
+ {showAllIncidentDetails && (
<>
@@ -388,13 +452,14 @@ const ServiceNowParamsFields: React.FunctionComponent<
label={i18n.COMMENTS_LABEL}
/>
>
- ) : (
+ )}
+ {showOnlyCorrelationId && (
)}
diff --git a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/types.ts b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/types.ts
index 15531f106bbf..dd0a47004f35 100644
--- a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/types.ts
+++ b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/types.ts
@@ -7,6 +7,11 @@
import type { ExecutorSubActionPushParamsITSM } from '../../../server/connector_types/lib/servicenow/types';
+export enum EventAction {
+ TRIGGER = 'trigger',
+ RESOLVE = 'resolve',
+}
+
export interface ServiceNowITSMActionParams {
subAction: string;
subActionParams: ExecutorSubActionPushParamsITSM;
From 881980aea01e15ff20f8fbbe01912ae8d547d075 Mon Sep 17 00:00:00 2001
From: DeDe Morton
Date: Mon, 11 Mar 2024 11:34:31 -0700
Subject: [PATCH 026/100] [DOCS] Replace table of links with single link to Obs
alerting docs (#177525)
## Summary
Replaces the categorized table of links with a single link to the
observability alerting docs because this table is likely to get stale
over time (in fact, it already is stale).
The change looks like this when rendered in HTML:
![image](https://github.com/elastic/kibana/assets/14206422/a3f67a18-f227-435d-9b56-ddb221cdce7c)
Notes/open issues:
- [x] The [main alerting
page](https://www.elastic.co/guide/en/kibana/master/alerting-getting-started.html)
for Kibana now has links to related alerting documentation, but is it
clear that those links point to docs that describe how to manage alerts
from those apps? The link text seems maybe not descriptive enough and
might be causing confusion. _NO CHANGE REQUIRED: I'm going to leave this
as-is because I think the feedback we received initially about the lack
of links was before the links were added._
- [x] In the intro, I feel a thought might be missing from this
statement: "For information on creating security rules, refer to Create
a detection rule." Should this instead say something like: "Security
rules must be defined in the Security app. For more information, refer
to the security docs about creating a detection rule." _RESOLVED_
- [x] I think the descriptions about each app's alerting capabilities
should be more consistent, but I don't want to rewrite other folk's
sections. So I have aligned my description with the security section,
for better or worse. It's hard to make this info consistent when each
solution/app is doing its own thing with alerting. _DEFERRED: We will
fix inconsistencies later._
- [x] Is it correct to say "create alerts" rather than something like
"trigger alerts" or "generate alerts"? _RESOLVED: Will keep as "create"
for now since the UI is not using "trigger."_
### Checklist
n/a
cc @lcawl Can you help me sort through my list of open issues?
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
docs/user/alerting/rule-types.asciidoc | 23 +----------------------
1 file changed, 1 insertion(+), 22 deletions(-)
diff --git a/docs/user/alerting/rule-types.asciidoc b/docs/user/alerting/rule-types.asciidoc
index bcab22f05ca0..4791dd4521c5 100644
--- a/docs/user/alerting/rule-types.asciidoc
+++ b/docs/user/alerting/rule-types.asciidoc
@@ -39,7 +39,7 @@ see {subscriptions}[the subscription page].
[[observability-rules]]
=== {observability} rules
-{observability} rules are categorized into APM and {user-experience}, Logs, Metrics, {stack-monitor-app}, and Uptime.
+{observability} rules detect complex conditions in your observability data and create alerts when a rule's conditions are met. For example, you can create a rule that detects when the value of a metric exceeds a specified threshold or when an anomaly occurs on a system or service you are monitoring. For more information, refer to {observability-guide}/create-alerts.html[Alerting].
[NOTE]
==============================================
@@ -47,27 +47,6 @@ If you create a rule in the {observability} app, its alerts are not visible in
*{stack-manage-app} > {rules-ui}*. They are visible only in the {observability} app.
==============================================
-[cols="2*<"]
-|===
-
-
-| <>
-| Detect complex conditions in *APM* data and trigger built-in actions when the conditions are met.
-
-| {observability-guide}/logs-threshold-alert.html[Logs rules]
-| Detect complex conditions in the {logs-app}.
-
-| {observability-guide}/metrics-threshold-alert.html[Metrics rules]
-| Detect complex conditions in the {metrics-app}.
-
-| {observability-guide}/slo-burn-rate-alert.html[SLO burn rate rule]
-| Detect when the burn rate is above a defined threshold.
-
-| {observability-guide}/monitor-status-alert.html[Uptime rules]
-| Detect complex conditions in the {uptime-app}.
-
-|===
-
[float]
[[ml-rules]]
=== Machine learning rules
From bf32af7ecbb26d4b675cf3f8987708a63847599c Mon Sep 17 00:00:00 2001
From: Jordan <51442161+JordanSh@users.noreply.github.com>
Date: Mon, 11 Mar 2024 20:46:11 +0200
Subject: [PATCH 027/100] [Cloud Security] Adding the serverless api
integration tests folder and serverless tag (#178417)
---
...enerated_csp_requirements_test_coverage.md | 97 +-
.../__auto_generated_csp_test_log.json | 1479 +++++++++++++----
.../common/scripts/get_tests.js | 20 +-
3 files changed, 1281 insertions(+), 315 deletions(-)
diff --git a/x-pack/plugins/cloud_security_posture/common/dev_docs/__auto_generated_csp_requirements_test_coverage.md b/x-pack/plugins/cloud_security_posture/common/dev_docs/__auto_generated_csp_requirements_test_coverage.md
index c18a57ff85ab..f0851690203c 100644
--- a/x-pack/plugins/cloud_security_posture/common/dev_docs/__auto_generated_csp_requirements_test_coverage.md
+++ b/x-pack/plugins/cloud_security_posture/common/dev_docs/__auto_generated_csp_requirements_test_coverage.md
@@ -7,7 +7,7 @@ You can also check out the dedicated app view, which enables easier search and f
## Directory: x-pack/plugins/cloud_security_posture
-**Total Tests:** 425 | **Skipped:** 5 (1.18%) | **Todo:** 0 (0.00%)
+**Total Tests:** 424 | **Skipped:** 5 (1.18%) | **Todo:** 0 (0.00%)
![](https://img.shields.io/badge/UT-brightgreen) ![](https://img.shields.io/badge/HAS-SKIP-yellow)
@@ -276,15 +276,14 @@ You can also check out the dedicated app view, which enables easier search and f
| [Prefer Cloud dashboard if both integration have findings](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
| [Show CSPM installation prompt if CSPM is not installed and KSPM is installed ,NO AGENT](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
| [Show KSPM installation prompt if KSPM is not installed and CSPM is installed , NO AGENT](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
-| [should not select default tab is user has already selected one themselves](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
| [getDefaultTab](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | describe | | |
| [returns CSPM tab if only CSPM has findings](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
| [returns CSPM tab if both CSPM and KSPM has findings](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
| [returns KSPM tab if only KSPM has findings](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
| [when no findings preffers CSPM tab unless not-installed or unprivileged](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
-| [returns CSPM tab is plugin status and kspm status is not provided](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
-| [returns KSPM tab is plugin status and csp status is not provided](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
-| [returns CSPM tab when only plugins status data is provided](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
+| [should returns undefined when plugin status and cspm stats is not provided](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
+| [should return undefined is plugin status and csp status is not provided ](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
+| [should return undefined when plugins status or cspm stats data is not provided](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | |
| [](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.test.tsx) | describe | | |
| [Sorting](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.test.tsx) | describe | | |
| [sorts by ascending order of compliance scores](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.test.tsx) | it | | |
@@ -443,11 +442,61 @@ You can also check out the dedicated app view, which enables easier search and f
| [should drop unknown properties when running the up migration](x-pack/plugins/cloud_security_posture/server/tasks/task_state.test.ts) | it | | |
+## Directory: x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture
+
+**Total Tests:** 37 | **Skipped:** 0 (0.00%) | **Todo:** 0 (0.00%)
+
+![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/SERVERLESS-pink) ![](https://img.shields.io/badge/API-INTEGRATION-purple)
+
+
+Test Details
+
+| Test Label | Type | Skipped | Todo |
+|------------|------|---------|------|
+| [GET /internal/cloud_security_posture/benchmark](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts) | describe | | |
+| [Should return non-empty array filled with Rules if user has CSP integrations](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts) | it | | |
+| [Should return array size 2 when we set per page to be only 2 (total element is still 3)](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts) | it | | |
+| [Should return array size 2 when we set per page to be only 2 (total element is still 3)](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts) | it | | |
+| [Should return empty array when we set page to be above the last page number](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts) | it | | |
+| [GET /internal/cloud_security_posture/benchmark](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v2.ts) | describe | | |
+| [Should return all benchmarks if user has CSP integrations](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v2.ts) | it | | |
+| [GET internal/cloud_security_posture/rules/_find](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | describe | | |
+| [Should return 500 error code when not provide package policy id or benchmark id](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | |
+| [Should return 500 error code when provide both package policy id and benchmark id](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | |
+| [Should return 404 status code when the package policy ID does not exist](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | |
+| [Should return 200 status code and filter rules by benchmarkId](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | |
+| [Should return 200 status code, and only requested fields in the response](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | |
+| [Should return 200 status code, items sorted by metadata.section field](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | |
+| [Should return 200 status code and paginate rules with a limit of PerPage](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | |
+| [cloud_security_posture](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/index.ts) | describe | | |
+| [GET /internal/cloud_security_posture/status](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts) | describe | | |
+| [STATUS = INDEXED TEST](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts) | describe | | |
+| [Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts) | it | | |
+| [Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts) | it | | |
+| [Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts) | it | | |
+| [GET /internal/cloud_security_posture/status](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts) | describe | | |
+| [STATUS = INDEXING TEST](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts) | describe | | |
+| [Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts) | it | | |
+| [Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts) | it | | |
+| [Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts) | it | | |
+| [GET /internal/cloud_security_posture/status](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts) | describe | | |
+| [STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts) | describe | | |
+| [Should return not-deployed when installed kspm, no findings on either indices and no healthy agents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts) | it | | |
+| [Should return not-deployed when installed cspm, no findings on either indices and no healthy agents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts) | it | | |
+| [Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts) | it | | |
+| [Verify cloud_security_posture telemetry payloads](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | describe | | |
+| [includes only KSPM findings](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | it | | |
+| [includes only CSPM findings](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | it | | |
+| [includes CSPM and KSPM findings](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | it | | |
+| [](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | it | | |
+| [includes KSPM findings without posture_type and CSPM findings as well](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | it | | |
+
+
## Directory: x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture
-**Total Tests:** 4 | **Skipped:** 2 (50.00%) | **Todo:** 0 (0.00%)
+**Total Tests:** 4 | **Skipped:** 0 (0.00%) | **Todo:** 0 (0.00%)
-![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/HAS-SKIP-yellow)
+![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/SERVERLESS-pink)
Test Details
@@ -455,8 +504,8 @@ You can also check out the dedicated app view, which enables easier search and f
| Test Label | Type | Skipped | Todo |
|------------|------|---------|------|
| [Cloud Posture Dashboard Page](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts) | describe | | |
-| [Kubernetes Dashboard](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts) | describe | ![](https://img.shields.io/badge/skipped-yellow) | |
-| [displays accurate summary compliance score](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
+| [Kubernetes Dashboard](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts) | describe | | |
+| [displays accurate summary compliance score](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts) | it | | |
| [cloud_security_posture](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/index.ts) | describe | | |
@@ -537,9 +586,9 @@ You can also check out the dedicated app view, which enables easier search and f
## Directory: x-pack/test/cloud_security_posture_api
-**Total Tests:** 35 | **Skipped:** 8 (22.86%) | **Todo:** 0 (0.00%)
+**Total Tests:** 35 | **Skipped:** 0 (0.00%) | **Todo:** 0 (0.00%)
-![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/API-INTEGRATION-purple) ![](https://img.shields.io/badge/HAS-SKIP-yellow)
+![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/API-INTEGRATION-purple)
Test Details
@@ -550,14 +599,14 @@ You can also check out the dedicated app view, which enables easier search and f
| [Get Benchmark API](x-pack/test/cloud_security_posture_api/routes/benchmarks.ts) | describe | | |
| [Verify cspm benchmark score is updated when muting rules](x-pack/test/cloud_security_posture_api/routes/benchmarks.ts) | it | | |
| [Verify kspm benchmark score is updated when muting rules](x-pack/test/cloud_security_posture_api/routes/benchmarks.ts) | it | | |
-| [Verify update csp rules states API](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | describe | ![](https://img.shields.io/badge/skipped-yellow) | |
-| [mute benchmark rules successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
-| [unmute rules successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
-| [verify new rules are added and existing rules are set.](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
-| [mute detection rule successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
-| [Expect to mute two benchmark rules and one detection rule](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
-| [Expect to save rules states when requesting to update empty object](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
-| [set wrong action input](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
+| [Verify update csp rules states API](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | describe | | |
+| [mute benchmark rules successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | |
+| [unmute rules successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | |
+| [verify new rules are added and existing rules are set.](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | |
+| [mute detection rule successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | |
+| [Expect to mute two benchmark rules and one detection rule](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | |
+| [Expect to save rules states when requesting to update empty object](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | |
+| [set wrong action input](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | |
| [Tests get rules states API](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_get_states.ts) | describe | | |
| [get rules states successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_get_states.ts) | it | | |
| [get empty object when rules states not exists](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_get_states.ts) | it | | |
@@ -585,7 +634,7 @@ You can also check out the dedicated app view, which enables easier search and f
## Directory: x-pack/test/cloud_security_posture_functional
-**Total Tests:** 137 | **Skipped:** 10 (7.30%) | **Todo:** 2 (1.46%)
+**Total Tests:** 137 | **Skipped:** 6 (4.38%) | **Todo:** 2 (1.46%)
![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/HAS-TODO-green) ![](https://img.shields.io/badge/HAS-SKIP-yellow)
@@ -653,10 +702,10 @@ You can also check out the dedicated app view, which enables easier search and f
| [Findings page with old data](x-pack/test/cloud_security_posture_functional/pages/findings_old_data.ts) | describe | | |
| [returns no Findings KSPM](x-pack/test/cloud_security_posture_functional/pages/findings_old_data.ts) | it | | |
| [returns no Findings CSPM](x-pack/test/cloud_security_posture_functional/pages/findings_old_data.ts) | it | | |
-| [Findings Page onboarding](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | describe | ![](https://img.shields.io/badge/skipped-yellow) | |
-| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
-| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
-| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
+| [Findings Page onboarding](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | describe | | |
+| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | | |
+| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | | |
+| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | | |
| [Findings Page - DataTable](x-pack/test/cloud_security_posture_functional/pages/findings.ts) | describe | | |
| [SearchBar](x-pack/test/cloud_security_posture_functional/pages/findings.ts) | describe | ![](https://img.shields.io/badge/skipped-yellow) | |
| [add filter](x-pack/test/cloud_security_posture_functional/pages/findings.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | |
diff --git a/x-pack/plugins/cloud_security_posture/common/scripts/__auto_generated_csp_test_log.json b/x-pack/plugins/cloud_security_posture/common/scripts/__auto_generated_csp_test_log.json
index c69ed1b2c5e2..7ed63d28af43 100644
--- a/x-pack/plugins/cloud_security_posture/common/scripts/__auto_generated_csp_test_log.json
+++ b/x-pack/plugins/cloud_security_posture/common/scripts/__auto_generated_csp_test_log.json
@@ -5606,15 +5606,14 @@
" it('Prefer Cloud dashboard if both integration have findings')",
" it('Show CSPM installation prompt if CSPM is not installed and KSPM is installed ,NO AGENT')",
" it('Show KSPM installation prompt if KSPM is not installed and CSPM is installed , NO AGENT')",
- " it('should not select default tab is user has already selected one themselves')",
"describe('getDefaultTab')",
" it('returns CSPM tab if only CSPM has findings')",
" it('returns CSPM tab if both CSPM and KSPM has findings')",
" it('returns KSPM tab if only KSPM has findings')",
" it('when no findings preffers CSPM tab unless not-installed or unprivileged')",
- " it('returns CSPM tab is plugin status and kspm status is not provided')",
- " it('returns KSPM tab is plugin status and csp status is not provided')",
- " it('returns CSPM tab when only plugins status data is provided')"
+ " it('should returns undefined when plugin status and cspm stats is not provided')",
+ " it('should return undefined is plugin status and csp status is not provided ')",
+ " it('should return undefined when plugins status or cspm stats data is not provided')"
],
"testSuits": [
{
@@ -5777,16 +5776,6 @@
"isSkipped": false,
"isTodo": false
},
- {
- "id": "should-not-select-default-tab-is-user-has-already-selected-one-themselves",
- "rawLine": " it('should not select default tab is user has already selected one themselves', () => {",
- "line": " it('should not select default tab is user has already selected one themselves')",
- "label": "should not select default tab is user has already selected one themselves",
- "indent": 2,
- "type": "it",
- "isSkipped": false,
- "isTodo": false
- },
{
"id": "getdefaulttab",
"rawLine": "describe('getDefaultTab', () => {",
@@ -5838,30 +5827,30 @@
"isTodo": false
},
{
- "id": "returns-cspm-tab-is-plugin-status-and-kspm-status-is-not-provided",
- "rawLine": " it('returns CSPM tab is plugin status and kspm status is not provided', () => {",
- "line": " it('returns CSPM tab is plugin status and kspm status is not provided')",
- "label": "returns CSPM tab is plugin status and kspm status is not provided",
+ "id": "should-returns-undefined-when-plugin-status-and-cspm-stats-is-not-provided",
+ "rawLine": " it('should returns undefined when plugin status and cspm stats is not provided', () => {",
+ "line": " it('should returns undefined when plugin status and cspm stats is not provided')",
+ "label": "should returns undefined when plugin status and cspm stats is not provided",
"indent": 2,
"type": "it",
"isSkipped": false,
"isTodo": false
},
{
- "id": "returns-kspm-tab-is-plugin-status-and-csp-status-is-not-provided",
- "rawLine": " it('returns KSPM tab is plugin status and csp status is not provided', () => {",
- "line": " it('returns KSPM tab is plugin status and csp status is not provided')",
- "label": "returns KSPM tab is plugin status and csp status is not provided",
+ "id": "should-return-undefined-is-plugin-status-and-csp-status-is-not-provided-",
+ "rawLine": " it('should return undefined is plugin status and csp status is not provided ', () => {",
+ "line": " it('should return undefined is plugin status and csp status is not provided ')",
+ "label": "should return undefined is plugin status and csp status is not provided ",
"indent": 2,
"type": "it",
"isSkipped": false,
"isTodo": false
},
{
- "id": "returns-cspm-tab-when-only-plugins-status-data-is-provided",
- "rawLine": " it('returns CSPM tab when only plugins status data is provided', () => {",
- "line": " it('returns CSPM tab when only plugins status data is provided')",
- "label": "returns CSPM tab when only plugins status data is provided",
+ "id": "should-return-undefined-when-plugins-status-or-cspm-stats-data-is-not-provided",
+ "rawLine": " it('should return undefined when plugins status or cspm stats data is not provided', () => {",
+ "line": " it('should return undefined when plugins status or cspm stats data is not provided')",
+ "label": "should return undefined when plugins status or cspm stats data is not provided",
"indent": 2,
"type": "it",
"isSkipped": false,
@@ -6028,16 +6017,6 @@
"type": "it",
"isSkipped": false,
"isTodo": false
- },
- {
- "id": "should-not-select-default-tab-is-user-has-already-selected-one-themselves",
- "rawLine": " it('should not select default tab is user has already selected one themselves', () => {",
- "line": " it('should not select default tab is user has already selected one themselves')",
- "label": "should not select default tab is user has already selected one themselves",
- "indent": 2,
- "type": "it",
- "isSkipped": false,
- "isTodo": false
}
]
},
@@ -6092,30 +6071,30 @@
"isTodo": false
},
{
- "id": "returns-cspm-tab-is-plugin-status-and-kspm-status-is-not-provided",
- "rawLine": " it('returns CSPM tab is plugin status and kspm status is not provided', () => {",
- "line": " it('returns CSPM tab is plugin status and kspm status is not provided')",
- "label": "returns CSPM tab is plugin status and kspm status is not provided",
+ "id": "should-returns-undefined-when-plugin-status-and-cspm-stats-is-not-provided",
+ "rawLine": " it('should returns undefined when plugin status and cspm stats is not provided', () => {",
+ "line": " it('should returns undefined when plugin status and cspm stats is not provided')",
+ "label": "should returns undefined when plugin status and cspm stats is not provided",
"indent": 2,
"type": "it",
"isSkipped": false,
"isTodo": false
},
{
- "id": "returns-kspm-tab-is-plugin-status-and-csp-status-is-not-provided",
- "rawLine": " it('returns KSPM tab is plugin status and csp status is not provided', () => {",
- "line": " it('returns KSPM tab is plugin status and csp status is not provided')",
- "label": "returns KSPM tab is plugin status and csp status is not provided",
+ "id": "should-return-undefined-is-plugin-status-and-csp-status-is-not-provided-",
+ "rawLine": " it('should return undefined is plugin status and csp status is not provided ', () => {",
+ "line": " it('should return undefined is plugin status and csp status is not provided ')",
+ "label": "should return undefined is plugin status and csp status is not provided ",
"indent": 2,
"type": "it",
"isSkipped": false,
"isTodo": false
},
{
- "id": "returns-cspm-tab-when-only-plugins-status-data-is-provided",
- "rawLine": " it('returns CSPM tab when only plugins status data is provided', () => {",
- "line": " it('returns CSPM tab when only plugins status data is provided')",
- "label": "returns CSPM tab when only plugins status data is provided",
+ "id": "should-return-undefined-when-plugins-status-or-cspm-stats-data-is-not-provided",
+ "rawLine": " it('should return undefined when plugins status or cspm stats data is not provided', () => {",
+ "line": " it('should return undefined when plugins status or cspm stats data is not provided')",
+ "label": "should return undefined when plugins status or cspm stats data is not provided",
"indent": 2,
"type": "it",
"isSkipped": false,
@@ -9837,128 +9816,12 @@
]
},
{
- "filePath": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts",
- "fileName": "compliance_dashboard.ts",
- "directory": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture",
- "tags": [
- "FTR",
- "HAS SKIP"
- ],
- "lines": [
- " describe('Cloud Posture Dashboard Page')",
- " describe.skip('Kubernetes Dashboard')",
- " it('displays accurate summary compliance score')"
- ],
- "testSuits": [
- {
- "id": "cloud-posture-dashboard-page",
- "rawLine": " describe('Cloud Posture Dashboard Page', function () {",
- "line": " describe('Cloud Posture Dashboard Page')",
- "label": "Cloud Posture Dashboard Page",
- "indent": 2,
- "type": "describe",
- "isSkipped": false,
- "isTodo": false
- },
- {
- "id": "kubernetes-dashboard",
- "rawLine": " describe.skip('Kubernetes Dashboard', () => {",
- "line": " describe.skip('Kubernetes Dashboard')",
- "label": "Kubernetes Dashboard",
- "indent": 4,
- "type": "describe",
- "isSkipped": true,
- "isTodo": false
- },
- {
- "id": "displays-accurate-summary-compliance-score",
- "rawLine": " it('displays accurate summary compliance score', async () => {",
- "line": " it('displays accurate summary compliance score')",
- "label": "displays accurate summary compliance score",
- "indent": 6,
- "type": "it",
- "isSkipped": false,
- "isTodo": false
- }
- ],
- "tree": [
- {
- "id": "cloud-posture-dashboard-page",
- "rawLine": " describe('Cloud Posture Dashboard Page', function () {",
- "line": " describe('Cloud Posture Dashboard Page')",
- "label": "Cloud Posture Dashboard Page",
- "indent": 2,
- "type": "describe",
- "isSkipped": false,
- "isTodo": false,
- "children": [
- {
- "id": "kubernetes-dashboard",
- "rawLine": " describe.skip('Kubernetes Dashboard', () => {",
- "line": " describe.skip('Kubernetes Dashboard')",
- "label": "Kubernetes Dashboard",
- "indent": 4,
- "type": "describe",
- "isSkipped": true,
- "isTodo": false,
- "children": [
- {
- "id": "displays-accurate-summary-compliance-score",
- "rawLine": " it('displays accurate summary compliance score', async () => {",
- "line": " it('displays accurate summary compliance score')",
- "label": "displays accurate summary compliance score",
- "indent": 6,
- "type": "it",
- "isSkipped": true,
- "isTodo": false
- }
- ]
- }
- ]
- }
- ]
- },
- {
- "filePath": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/index.ts",
- "fileName": "index.ts",
- "directory": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture",
- "tags": [
- "FTR"
- ],
- "lines": [
- " describe('cloud_security_posture')"
- ],
- "testSuits": [
- {
- "id": "cloud_security_posture",
- "rawLine": " describe('cloud_security_posture', function () {",
- "line": " describe('cloud_security_posture')",
- "label": "cloud_security_posture",
- "indent": 2,
- "type": "describe",
- "isSkipped": false,
- "isTodo": false
- }
- ],
- "tree": [
- {
- "id": "cloud_security_posture",
- "rawLine": " describe('cloud_security_posture', function () {",
- "line": " describe('cloud_security_posture')",
- "label": "cloud_security_posture",
- "indent": 2,
- "type": "describe",
- "isSkipped": false,
- "isTodo": false
- }
- ]
- },
- {
- "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/benchmark/v1.ts",
+ "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts",
"fileName": "v1.ts",
- "directory": "x-pack/test/api_integration/apis/cloud_security_posture",
+ "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture",
"tags": [
"FTR",
+ "SERVERLESS",
"API INTEGRATION"
],
"lines": [
@@ -9971,7 +9834,7 @@
"testSuits": [
{
"id": "get-/internal/cloud_security_posture/benchmark",
- "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {",
+ "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', function () {",
"line": " describe('GET /internal/cloud_security_posture/benchmark')",
"label": "GET /internal/cloud_security_posture/benchmark",
"indent": 2,
@@ -10023,7 +9886,7 @@
"tree": [
{
"id": "get-/internal/cloud_security_posture/benchmark",
- "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {",
+ "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', function () {",
"line": " describe('GET /internal/cloud_security_posture/benchmark')",
"label": "GET /internal/cloud_security_posture/benchmark",
"indent": 2,
@@ -10076,11 +9939,12 @@
]
},
{
- "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/benchmark/v2.ts",
+ "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v2.ts",
"fileName": "v2.ts",
- "directory": "x-pack/test/api_integration/apis/cloud_security_posture",
+ "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture",
"tags": [
"FTR",
+ "SERVERLESS",
"API INTEGRATION"
],
"lines": [
@@ -10090,7 +9954,7 @@
"testSuits": [
{
"id": "get-/internal/cloud_security_posture/benchmark",
- "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {",
+ "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', function () {",
"line": " describe('GET /internal/cloud_security_posture/benchmark')",
"label": "GET /internal/cloud_security_posture/benchmark",
"indent": 2,
@@ -10112,7 +9976,7 @@
"tree": [
{
"id": "get-/internal/cloud_security_posture/benchmark",
- "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {",
+ "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', function () {",
"line": " describe('GET /internal/cloud_security_posture/benchmark')",
"label": "GET /internal/cloud_security_posture/benchmark",
"indent": 2,
@@ -10135,11 +9999,12 @@
]
},
{
- "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/find_csp_benchmark_rule.ts",
+ "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts",
"fileName": "find_csp_benchmark_rule.ts",
- "directory": "x-pack/test/api_integration/apis/cloud_security_posture",
+ "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture",
"tags": [
"FTR",
+ "SERVERLESS",
"API INTEGRATION"
],
"lines": [
@@ -10155,7 +10020,7 @@
"testSuits": [
{
"id": "get-internal/cloud_security_posture/rules/_find",
- "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {",
+ "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', function () {",
"line": " describe('GET internal/cloud_security_posture/rules/_find')",
"label": "GET internal/cloud_security_posture/rules/_find",
"indent": 2,
@@ -10237,7 +10102,7 @@
"tree": [
{
"id": "get-internal/cloud_security_posture/rules/_find",
- "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {",
+ "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', function () {",
"line": " describe('GET internal/cloud_security_posture/rules/_find')",
"label": "GET internal/cloud_security_posture/rules/_find",
"indent": 2,
@@ -10320,11 +10185,12 @@
]
},
{
- "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/index.ts",
+ "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/index.ts",
"fileName": "index.ts",
- "directory": "x-pack/test/api_integration/apis/cloud_security_posture",
+ "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture",
"tags": [
"FTR",
+ "SERVERLESS",
"API INTEGRATION"
],
"lines": [
@@ -10356,100 +10222,68 @@
]
},
{
- "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/rules/v1.ts",
- "fileName": "v1.ts",
- "directory": "x-pack/test/api_integration/apis/cloud_security_posture",
+ "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts",
+ "fileName": "status_indexed.ts",
+ "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture",
"tags": [
"FTR",
+ "SERVERLESS",
"API INTEGRATION"
],
"lines": [
- " describe('GET internal/cloud_security_posture/rules/_find')",
- " it(`Should return 500 error code when not provide package policy id or benchmark id`)",
- " it(`Should return 500 error code when provide both package policy id and benchmark id`)",
- " it(`Should return 404 status code when the package policy ID does not exist`)",
- " it(`Should return 200 status code and filter rules by benchmarkId`)",
- " it(`Should return 200 status code, and only requested fields in the response`)",
- " it(`Should return 200 status code, items sorted by metadata.section field`)",
- " it(`Should return 200 status code and paginate rules with a limit of PerPage`)"
+ " describe('GET /internal/cloud_security_posture/status')",
+ " describe('STATUS = INDEXED TEST')",
+ " it(`Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents`)",
+ " it(`Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents`)",
+ " it(`Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents`)"
],
"testSuits": [
{
- "id": "get-internal/cloud_security_posture/rules/_find",
- "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {",
- "line": " describe('GET internal/cloud_security_posture/rules/_find')",
- "label": "GET internal/cloud_security_posture/rules/_find",
+ "id": "get-/internal/cloud_security_posture/status",
+ "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {",
+ "line": " describe('GET /internal/cloud_security_posture/status')",
+ "label": "GET /internal/cloud_security_posture/status",
"indent": 2,
"type": "describe",
"isSkipped": false,
"isTodo": false
},
{
- "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id",
- "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {",
- "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)",
- "label": "Should return 500 error code when not provide package policy id or benchmark id",
- "indent": 4,
- "type": "it",
- "isSkipped": false,
- "isTodo": false
- },
- {
- "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id",
- "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {",
- "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)",
- "label": "Should return 500 error code when provide both package policy id and benchmark id",
- "indent": 4,
- "type": "it",
- "isSkipped": false,
- "isTodo": false
- },
- {
- "id": "should-return-404-status-code-when-the-package-policy-id-does-not-exist",
- "rawLine": " it(`Should return 404 status code when the package policy ID does not exist`, async () => {",
- "line": " it(`Should return 404 status code when the package policy ID does not exist`)",
- "label": "Should return 404 status code when the package policy ID does not exist",
- "indent": 4,
- "type": "it",
- "isSkipped": false,
- "isTodo": false
- },
- {
- "id": "should-return-200-status-code-and-filter-rules-by-benchmarkid",
- "rawLine": " it(`Should return 200 status code and filter rules by benchmarkId`, async () => {",
- "line": " it(`Should return 200 status code and filter rules by benchmarkId`)",
- "label": "Should return 200 status code and filter rules by benchmarkId",
+ "id": "status-=-indexed-test",
+ "rawLine": " describe('STATUS = INDEXED TEST', () => {",
+ "line": " describe('STATUS = INDEXED TEST')",
+ "label": "STATUS = INDEXED TEST",
"indent": 4,
- "type": "it",
+ "type": "describe",
"isSkipped": false,
"isTodo": false
},
{
- "id": "should-return-200-status-code,-and-only-requested-fields-in-the-response",
- "rawLine": " it(`Should return 200 status code, and only requested fields in the response`, async () => {",
- "line": " it(`Should return 200 status code, and only requested fields in the response`)",
- "label": "Should return 200 status code, and only requested fields in the response",
- "indent": 4,
+ "id": "return-kspm-status-indexed-when-logs-cloud_security_posture.findings_latest-default-contains-new-kspm-documents",
+ "rawLine": " it(`Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents`, async () => {",
+ "line": " it(`Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents`)",
+ "label": "Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents",
+ "indent": 6,
"type": "it",
"isSkipped": false,
"isTodo": false
},
{
- "id": "should-return-200-status-code,-items-sorted-by-metadata.section-field",
- "rawLine": " it(`Should return 200 status code, items sorted by metadata.section field`, async () => {",
- "line": " it(`Should return 200 status code, items sorted by metadata.section field`)",
- "label": "Should return 200 status code, items sorted by metadata.section field",
- "indent": 4,
+ "id": "return-cspm-status-indexed-when-logs-cloud_security_posture.findings_latest-default-contains-new-cspm-documents",
+ "rawLine": " it(`Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents`, async () => {",
+ "line": " it(`Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents`)",
+ "label": "Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents",
+ "indent": 6,
"type": "it",
"isSkipped": false,
"isTodo": false
},
{
- "id": "should-return-200-status-code-and-paginate-rules-with-a-limit-of-perpage",
- "rawLine": " it(`Should return 200 status code and paginate rules with a limit of PerPage`, async () => {",
- "line": " it(`Should return 200 status code and paginate rules with a limit of PerPage`)",
- "label": "Should return 200 status code and paginate rules with a limit of PerPage",
- "indent": 4,
+ "id": "return-vuln-status-indexed-when-logs-cloud_security_posture.vulnerabilities_latest-default-contains-new-documents",
+ "rawLine": " it(`Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents`, async () => {",
+ "line": " it(`Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents`)",
+ "label": "Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents",
+ "indent": 6,
"type": "it",
"isSkipped": false,
"isTodo": false
@@ -10457,30 +10291,1101 @@
],
"tree": [
{
- "id": "get-internal/cloud_security_posture/rules/_find",
- "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {",
- "line": " describe('GET internal/cloud_security_posture/rules/_find')",
- "label": "GET internal/cloud_security_posture/rules/_find",
+ "id": "get-/internal/cloud_security_posture/status",
+ "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {",
+ "line": " describe('GET /internal/cloud_security_posture/status')",
+ "label": "GET /internal/cloud_security_posture/status",
"indent": 2,
"type": "describe",
"isSkipped": false,
"isTodo": false,
"children": [
{
- "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id",
- "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {",
- "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)",
- "label": "Should return 500 error code when not provide package policy id or benchmark id",
+ "id": "status-=-indexed-test",
+ "rawLine": " describe('STATUS = INDEXED TEST', () => {",
+ "line": " describe('STATUS = INDEXED TEST')",
+ "label": "STATUS = INDEXED TEST",
"indent": 4,
- "type": "it",
+ "type": "describe",
"isSkipped": false,
- "isTodo": false
- },
- {
- "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id",
- "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {",
- "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)",
- "label": "Should return 500 error code when provide both package policy id and benchmark id",
+ "isTodo": false,
+ "children": [
+ {
+ "id": "return-kspm-status-indexed-when-logs-cloud_security_posture.findings_latest-default-contains-new-kspm-documents",
+ "rawLine": " it(`Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents`, async () => {",
+ "line": " it(`Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents`)",
+ "label": "Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "return-cspm-status-indexed-when-logs-cloud_security_posture.findings_latest-default-contains-new-cspm-documents",
+ "rawLine": " it(`Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents`, async () => {",
+ "line": " it(`Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents`)",
+ "label": "Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "return-vuln-status-indexed-when-logs-cloud_security_posture.vulnerabilities_latest-default-contains-new-documents",
+ "rawLine": " it(`Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents`, async () => {",
+ "line": " it(`Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents`)",
+ "label": "Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts",
+ "fileName": "status_indexing.ts",
+ "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture",
+ "tags": [
+ "FTR",
+ "SERVERLESS",
+ "API INTEGRATION"
+ ],
+ "lines": [
+ " describe('GET /internal/cloud_security_posture/status')",
+ " describe('STATUS = INDEXING TEST')",
+ " it(`Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new kspm documents, but has newly connected agents`)",
+ " it(`Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new cspm documents, but has newly connected agents `)",
+ " it(`Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn't contain vuln new documents, but has newly connected agents`)"
+ ],
+ "testSuits": [
+ {
+ "id": "get-/internal/cloud_security_posture/status",
+ "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {",
+ "line": " describe('GET /internal/cloud_security_posture/status')",
+ "label": "GET /internal/cloud_security_posture/status",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "status-=-indexing-test",
+ "rawLine": " describe('STATUS = INDEXING TEST', () => {",
+ "line": " describe('STATUS = INDEXING TEST')",
+ "label": "STATUS = INDEXING TEST",
+ "indent": 4,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "return-kspm-status-indexing-when-logs-cloud_security_posture.findings_latest-default-doesn",
+ "rawLine": " it(`Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new kspm documents, but has newly connected agents`, async () => {",
+ "line": " it(`Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new kspm documents, but has newly connected agents`)",
+ "label": "Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "return-cspm-status-indexing-when-logs-cloud_security_posture.findings_latest-default-doesn",
+ "rawLine": " it(`Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new cspm documents, but has newly connected agents `, async () => {",
+ "line": " it(`Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new cspm documents, but has newly connected agents `)",
+ "label": "Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "return-vuln-status-indexing-when-logs-cloud_security_posture.vulnerabilities_latest-default-doesn",
+ "rawLine": " it(`Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn't contain vuln new documents, but has newly connected agents`, async () => {",
+ "line": " it(`Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn't contain vuln new documents, but has newly connected agents`)",
+ "label": "Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ],
+ "tree": [
+ {
+ "id": "get-/internal/cloud_security_posture/status",
+ "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {",
+ "line": " describe('GET /internal/cloud_security_posture/status')",
+ "label": "GET /internal/cloud_security_posture/status",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false,
+ "children": [
+ {
+ "id": "status-=-indexing-test",
+ "rawLine": " describe('STATUS = INDEXING TEST', () => {",
+ "line": " describe('STATUS = INDEXING TEST')",
+ "label": "STATUS = INDEXING TEST",
+ "indent": 4,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false,
+ "children": [
+ {
+ "id": "return-kspm-status-indexing-when-logs-cloud_security_posture.findings_latest-default-doesn",
+ "rawLine": " it(`Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new kspm documents, but has newly connected agents`, async () => {",
+ "line": " it(`Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new kspm documents, but has newly connected agents`)",
+ "label": "Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "return-cspm-status-indexing-when-logs-cloud_security_posture.findings_latest-default-doesn",
+ "rawLine": " it(`Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new cspm documents, but has newly connected agents `, async () => {",
+ "line": " it(`Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new cspm documents, but has newly connected agents `)",
+ "label": "Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "return-vuln-status-indexing-when-logs-cloud_security_posture.vulnerabilities_latest-default-doesn",
+ "rawLine": " it(`Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn't contain vuln new documents, but has newly connected agents`, async () => {",
+ "line": " it(`Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn't contain vuln new documents, but has newly connected agents`)",
+ "label": "Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts",
+ "fileName": "status_not_deployed_not_installed.ts",
+ "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture",
+ "tags": [
+ "FTR",
+ "SERVERLESS",
+ "API INTEGRATION"
+ ],
+ "lines": [
+ " describe('GET /internal/cloud_security_posture/status')",
+ " describe('STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST')",
+ " it(`Should return not-deployed when installed kspm, no findings on either indices and no healthy agents`)",
+ " it(`Should return not-deployed when installed cspm, no findings on either indices and no healthy agents`)",
+ " it(`Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents`)"
+ ],
+ "testSuits": [
+ {
+ "id": "get-/internal/cloud_security_posture/status",
+ "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {",
+ "line": " describe('GET /internal/cloud_security_posture/status')",
+ "label": "GET /internal/cloud_security_posture/status",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "status-=-not-deployed-and-status-=-not-installed-test",
+ "rawLine": " describe('STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST', () => {",
+ "line": " describe('STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST')",
+ "label": "STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST",
+ "indent": 4,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-not-deployed-when-installed-kspm,-no-findings-on-either-indices-and-no-healthy-agents",
+ "rawLine": " it(`Should return not-deployed when installed kspm, no findings on either indices and no healthy agents`, async () => {",
+ "line": " it(`Should return not-deployed when installed kspm, no findings on either indices and no healthy agents`)",
+ "label": "Should return not-deployed when installed kspm, no findings on either indices and no healthy agents",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-not-deployed-when-installed-cspm,-no-findings-on-either-indices-and-no-healthy-agents",
+ "rawLine": " it(`Should return not-deployed when installed cspm, no findings on either indices and no healthy agents`, async () => {",
+ "line": " it(`Should return not-deployed when installed cspm, no findings on either indices and no healthy agents`)",
+ "label": "Should return not-deployed when installed cspm, no findings on either indices and no healthy agents",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-not-deployed-when-installed-cnvm,-no-findings-on-either-indices-and-no-healthy-agents",
+ "rawLine": " it(`Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents`, async () => {",
+ "line": " it(`Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents`)",
+ "label": "Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ],
+ "tree": [
+ {
+ "id": "get-/internal/cloud_security_posture/status",
+ "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {",
+ "line": " describe('GET /internal/cloud_security_posture/status')",
+ "label": "GET /internal/cloud_security_posture/status",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false,
+ "children": [
+ {
+ "id": "status-=-not-deployed-and-status-=-not-installed-test",
+ "rawLine": " describe('STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST', () => {",
+ "line": " describe('STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST')",
+ "label": "STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST",
+ "indent": 4,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false,
+ "children": [
+ {
+ "id": "should-return-not-deployed-when-installed-kspm,-no-findings-on-either-indices-and-no-healthy-agents",
+ "rawLine": " it(`Should return not-deployed when installed kspm, no findings on either indices and no healthy agents`, async () => {",
+ "line": " it(`Should return not-deployed when installed kspm, no findings on either indices and no healthy agents`)",
+ "label": "Should return not-deployed when installed kspm, no findings on either indices and no healthy agents",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-not-deployed-when-installed-cspm,-no-findings-on-either-indices-and-no-healthy-agents",
+ "rawLine": " it(`Should return not-deployed when installed cspm, no findings on either indices and no healthy agents`, async () => {",
+ "line": " it(`Should return not-deployed when installed cspm, no findings on either indices and no healthy agents`)",
+ "label": "Should return not-deployed when installed cspm, no findings on either indices and no healthy agents",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-not-deployed-when-installed-cnvm,-no-findings-on-either-indices-and-no-healthy-agents",
+ "rawLine": " it(`Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents`, async () => {",
+ "line": " it(`Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents`)",
+ "label": "Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts",
+ "fileName": "telemetry.ts",
+ "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture",
+ "tags": [
+ "FTR",
+ "SERVERLESS",
+ "API INTEGRATION"
+ ],
+ "lines": [
+ " describe('Verify cloud_security_posture telemetry payloads')",
+ " it('includes only KSPM findings')",
+ " it('includes only CSPM findings')",
+ " it('includes CSPM and KSPM findings')",
+ " it(`'includes only KSPM findings without posture_type'`)",
+ " it('includes KSPM findings without posture_type and CSPM findings as well')"
+ ],
+ "testSuits": [
+ {
+ "id": "verify-cloud_security_posture-telemetry-payloads",
+ "rawLine": " describe('Verify cloud_security_posture telemetry payloads', function () {",
+ "line": " describe('Verify cloud_security_posture telemetry payloads')",
+ "label": "Verify cloud_security_posture telemetry payloads",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "includes-only-kspm-findings",
+ "rawLine": " it('includes only KSPM findings', async () => {",
+ "line": " it('includes only KSPM findings')",
+ "label": "includes only KSPM findings",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "includes-only-cspm-findings",
+ "rawLine": " it('includes only CSPM findings', async () => {",
+ "line": " it('includes only CSPM findings')",
+ "label": "includes only CSPM findings",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "includes-cspm-and-kspm-findings",
+ "rawLine": " it('includes CSPM and KSPM findings', async () => {",
+ "line": " it('includes CSPM and KSPM findings')",
+ "label": "includes CSPM and KSPM findings",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "",
+ "rawLine": " it(`'includes only KSPM findings without posture_type'`, async () => {",
+ "line": " it(`'includes only KSPM findings without posture_type'`)",
+ "label": "",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "includes-kspm-findings-without-posture_type-and-cspm-findings-as-well",
+ "rawLine": " it('includes KSPM findings without posture_type and CSPM findings as well', async () => {",
+ "line": " it('includes KSPM findings without posture_type and CSPM findings as well')",
+ "label": "includes KSPM findings without posture_type and CSPM findings as well",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ],
+ "tree": [
+ {
+ "id": "verify-cloud_security_posture-telemetry-payloads",
+ "rawLine": " describe('Verify cloud_security_posture telemetry payloads', function () {",
+ "line": " describe('Verify cloud_security_posture telemetry payloads')",
+ "label": "Verify cloud_security_posture telemetry payloads",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false,
+ "children": [
+ {
+ "id": "includes-only-kspm-findings",
+ "rawLine": " it('includes only KSPM findings', async () => {",
+ "line": " it('includes only KSPM findings')",
+ "label": "includes only KSPM findings",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "includes-only-cspm-findings",
+ "rawLine": " it('includes only CSPM findings', async () => {",
+ "line": " it('includes only CSPM findings')",
+ "label": "includes only CSPM findings",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "includes-cspm-and-kspm-findings",
+ "rawLine": " it('includes CSPM and KSPM findings', async () => {",
+ "line": " it('includes CSPM and KSPM findings')",
+ "label": "includes CSPM and KSPM findings",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "",
+ "rawLine": " it(`'includes only KSPM findings without posture_type'`, async () => {",
+ "line": " it(`'includes only KSPM findings without posture_type'`)",
+ "label": "",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "includes-kspm-findings-without-posture_type-and-cspm-findings-as-well",
+ "rawLine": " it('includes KSPM findings without posture_type and CSPM findings as well', async () => {",
+ "line": " it('includes KSPM findings without posture_type and CSPM findings as well')",
+ "label": "includes KSPM findings without posture_type and CSPM findings as well",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "filePath": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts",
+ "fileName": "compliance_dashboard.ts",
+ "directory": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture",
+ "tags": [
+ "FTR",
+ "SERVERLESS"
+ ],
+ "lines": [
+ " describe('Cloud Posture Dashboard Page')",
+ " describe('Kubernetes Dashboard')",
+ " it('displays accurate summary compliance score')"
+ ],
+ "testSuits": [
+ {
+ "id": "cloud-posture-dashboard-page",
+ "rawLine": " describe('Cloud Posture Dashboard Page', function () {",
+ "line": " describe('Cloud Posture Dashboard Page')",
+ "label": "Cloud Posture Dashboard Page",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "kubernetes-dashboard",
+ "rawLine": " describe('Kubernetes Dashboard', () => {",
+ "line": " describe('Kubernetes Dashboard')",
+ "label": "Kubernetes Dashboard",
+ "indent": 4,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "displays-accurate-summary-compliance-score",
+ "rawLine": " it('displays accurate summary compliance score', async () => {",
+ "line": " it('displays accurate summary compliance score')",
+ "label": "displays accurate summary compliance score",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ],
+ "tree": [
+ {
+ "id": "cloud-posture-dashboard-page",
+ "rawLine": " describe('Cloud Posture Dashboard Page', function () {",
+ "line": " describe('Cloud Posture Dashboard Page')",
+ "label": "Cloud Posture Dashboard Page",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false,
+ "children": [
+ {
+ "id": "kubernetes-dashboard",
+ "rawLine": " describe('Kubernetes Dashboard', () => {",
+ "line": " describe('Kubernetes Dashboard')",
+ "label": "Kubernetes Dashboard",
+ "indent": 4,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false,
+ "children": [
+ {
+ "id": "displays-accurate-summary-compliance-score",
+ "rawLine": " it('displays accurate summary compliance score', async () => {",
+ "line": " it('displays accurate summary compliance score')",
+ "label": "displays accurate summary compliance score",
+ "indent": 6,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "filePath": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/index.ts",
+ "fileName": "index.ts",
+ "directory": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture",
+ "tags": [
+ "FTR",
+ "SERVERLESS"
+ ],
+ "lines": [
+ " describe('cloud_security_posture')"
+ ],
+ "testSuits": [
+ {
+ "id": "cloud_security_posture",
+ "rawLine": " describe('cloud_security_posture', function () {",
+ "line": " describe('cloud_security_posture')",
+ "label": "cloud_security_posture",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ],
+ "tree": [
+ {
+ "id": "cloud_security_posture",
+ "rawLine": " describe('cloud_security_posture', function () {",
+ "line": " describe('cloud_security_posture')",
+ "label": "cloud_security_posture",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ]
+ },
+ {
+ "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/benchmark/v1.ts",
+ "fileName": "v1.ts",
+ "directory": "x-pack/test/api_integration/apis/cloud_security_posture",
+ "tags": [
+ "FTR",
+ "API INTEGRATION"
+ ],
+ "lines": [
+ " describe('GET /internal/cloud_security_posture/benchmark')",
+ " it(`Should return non-empty array filled with Rules if user has CSP integrations`)",
+ " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)",
+ " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)",
+ " it(`Should return empty array when we set page to be above the last page number`)"
+ ],
+ "testSuits": [
+ {
+ "id": "get-/internal/cloud_security_posture/benchmark",
+ "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {",
+ "line": " describe('GET /internal/cloud_security_posture/benchmark')",
+ "label": "GET /internal/cloud_security_posture/benchmark",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-non-empty-array-filled-with-rules-if-user-has-csp-integrations",
+ "rawLine": " it(`Should return non-empty array filled with Rules if user has CSP integrations`, async () => {",
+ "line": " it(`Should return non-empty array filled with Rules if user has CSP integrations`)",
+ "label": "Should return non-empty array filled with Rules if user has CSP integrations",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-array-size-2-when-we-set-per-page-to-be-only-2-(total-element-is-still-3)",
+ "rawLine": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`, async () => {",
+ "line": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)",
+ "label": "Should return array size 2 when we set per page to be only 2 (total element is still 3)",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-array-size-2-when-we-set-per-page-to-be-only-2-(total-element-is-still-3)",
+ "rawLine": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`, async () => {",
+ "line": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)",
+ "label": "Should return array size 2 when we set per page to be only 2 (total element is still 3)",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-empty-array-when-we-set-page-to-be-above-the-last-page-number",
+ "rawLine": " it(`Should return empty array when we set page to be above the last page number`, async () => {",
+ "line": " it(`Should return empty array when we set page to be above the last page number`)",
+ "label": "Should return empty array when we set page to be above the last page number",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ],
+ "tree": [
+ {
+ "id": "get-/internal/cloud_security_posture/benchmark",
+ "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {",
+ "line": " describe('GET /internal/cloud_security_posture/benchmark')",
+ "label": "GET /internal/cloud_security_posture/benchmark",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false,
+ "children": [
+ {
+ "id": "should-return-non-empty-array-filled-with-rules-if-user-has-csp-integrations",
+ "rawLine": " it(`Should return non-empty array filled with Rules if user has CSP integrations`, async () => {",
+ "line": " it(`Should return non-empty array filled with Rules if user has CSP integrations`)",
+ "label": "Should return non-empty array filled with Rules if user has CSP integrations",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-array-size-2-when-we-set-per-page-to-be-only-2-(total-element-is-still-3)",
+ "rawLine": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`, async () => {",
+ "line": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)",
+ "label": "Should return array size 2 when we set per page to be only 2 (total element is still 3)",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-array-size-2-when-we-set-per-page-to-be-only-2-(total-element-is-still-3)",
+ "rawLine": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`, async () => {",
+ "line": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)",
+ "label": "Should return array size 2 when we set per page to be only 2 (total element is still 3)",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-empty-array-when-we-set-page-to-be-above-the-last-page-number",
+ "rawLine": " it(`Should return empty array when we set page to be above the last page number`, async () => {",
+ "line": " it(`Should return empty array when we set page to be above the last page number`)",
+ "label": "Should return empty array when we set page to be above the last page number",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/benchmark/v2.ts",
+ "fileName": "v2.ts",
+ "directory": "x-pack/test/api_integration/apis/cloud_security_posture",
+ "tags": [
+ "FTR",
+ "API INTEGRATION"
+ ],
+ "lines": [
+ " describe('GET /internal/cloud_security_posture/benchmark')",
+ " it(`Should return all benchmarks if user has CSP integrations`)"
+ ],
+ "testSuits": [
+ {
+ "id": "get-/internal/cloud_security_posture/benchmark",
+ "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {",
+ "line": " describe('GET /internal/cloud_security_posture/benchmark')",
+ "label": "GET /internal/cloud_security_posture/benchmark",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-all-benchmarks-if-user-has-csp-integrations",
+ "rawLine": " it(`Should return all benchmarks if user has CSP integrations`, async () => {",
+ "line": " it(`Should return all benchmarks if user has CSP integrations`)",
+ "label": "Should return all benchmarks if user has CSP integrations",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ],
+ "tree": [
+ {
+ "id": "get-/internal/cloud_security_posture/benchmark",
+ "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {",
+ "line": " describe('GET /internal/cloud_security_posture/benchmark')",
+ "label": "GET /internal/cloud_security_posture/benchmark",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false,
+ "children": [
+ {
+ "id": "should-return-all-benchmarks-if-user-has-csp-integrations",
+ "rawLine": " it(`Should return all benchmarks if user has CSP integrations`, async () => {",
+ "line": " it(`Should return all benchmarks if user has CSP integrations`)",
+ "label": "Should return all benchmarks if user has CSP integrations",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/find_csp_benchmark_rule.ts",
+ "fileName": "find_csp_benchmark_rule.ts",
+ "directory": "x-pack/test/api_integration/apis/cloud_security_posture",
+ "tags": [
+ "FTR",
+ "API INTEGRATION"
+ ],
+ "lines": [
+ " describe('GET internal/cloud_security_posture/rules/_find')",
+ " it(`Should return 500 error code when not provide package policy id or benchmark id`)",
+ " it(`Should return 500 error code when provide both package policy id and benchmark id`)",
+ " it(`Should return 404 status code when the package policy ID does not exist`)",
+ " it(`Should return 200 status code and filter rules by benchmarkId`)",
+ " it(`Should return 200 status code, and only requested fields in the response`)",
+ " it(`Should return 200 status code, items sorted by metadata.section field`)",
+ " it(`Should return 200 status code and paginate rules with a limit of PerPage`)"
+ ],
+ "testSuits": [
+ {
+ "id": "get-internal/cloud_security_posture/rules/_find",
+ "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {",
+ "line": " describe('GET internal/cloud_security_posture/rules/_find')",
+ "label": "GET internal/cloud_security_posture/rules/_find",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id",
+ "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {",
+ "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)",
+ "label": "Should return 500 error code when not provide package policy id or benchmark id",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id",
+ "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {",
+ "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)",
+ "label": "Should return 500 error code when provide both package policy id and benchmark id",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-404-status-code-when-the-package-policy-id-does-not-exist",
+ "rawLine": " it(`Should return 404 status code when the package policy ID does not exist`, async () => {",
+ "line": " it(`Should return 404 status code when the package policy ID does not exist`)",
+ "label": "Should return 404 status code when the package policy ID does not exist",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code-and-filter-rules-by-benchmarkid",
+ "rawLine": " it(`Should return 200 status code and filter rules by benchmarkId`, async () => {",
+ "line": " it(`Should return 200 status code and filter rules by benchmarkId`)",
+ "label": "Should return 200 status code and filter rules by benchmarkId",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code,-and-only-requested-fields-in-the-response",
+ "rawLine": " it(`Should return 200 status code, and only requested fields in the response`, async () => {",
+ "line": " it(`Should return 200 status code, and only requested fields in the response`)",
+ "label": "Should return 200 status code, and only requested fields in the response",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code,-items-sorted-by-metadata.section-field",
+ "rawLine": " it(`Should return 200 status code, items sorted by metadata.section field`, async () => {",
+ "line": " it(`Should return 200 status code, items sorted by metadata.section field`)",
+ "label": "Should return 200 status code, items sorted by metadata.section field",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code-and-paginate-rules-with-a-limit-of-perpage",
+ "rawLine": " it(`Should return 200 status code and paginate rules with a limit of PerPage`, async () => {",
+ "line": " it(`Should return 200 status code and paginate rules with a limit of PerPage`)",
+ "label": "Should return 200 status code and paginate rules with a limit of PerPage",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ],
+ "tree": [
+ {
+ "id": "get-internal/cloud_security_posture/rules/_find",
+ "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {",
+ "line": " describe('GET internal/cloud_security_posture/rules/_find')",
+ "label": "GET internal/cloud_security_posture/rules/_find",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false,
+ "children": [
+ {
+ "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id",
+ "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {",
+ "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)",
+ "label": "Should return 500 error code when not provide package policy id or benchmark id",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id",
+ "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {",
+ "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)",
+ "label": "Should return 500 error code when provide both package policy id and benchmark id",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-404-status-code-when-the-package-policy-id-does-not-exist",
+ "rawLine": " it(`Should return 404 status code when the package policy ID does not exist`, async () => {",
+ "line": " it(`Should return 404 status code when the package policy ID does not exist`)",
+ "label": "Should return 404 status code when the package policy ID does not exist",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code-and-filter-rules-by-benchmarkid",
+ "rawLine": " it(`Should return 200 status code and filter rules by benchmarkId`, async () => {",
+ "line": " it(`Should return 200 status code and filter rules by benchmarkId`)",
+ "label": "Should return 200 status code and filter rules by benchmarkId",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code,-and-only-requested-fields-in-the-response",
+ "rawLine": " it(`Should return 200 status code, and only requested fields in the response`, async () => {",
+ "line": " it(`Should return 200 status code, and only requested fields in the response`)",
+ "label": "Should return 200 status code, and only requested fields in the response",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code,-items-sorted-by-metadata.section-field",
+ "rawLine": " it(`Should return 200 status code, items sorted by metadata.section field`, async () => {",
+ "line": " it(`Should return 200 status code, items sorted by metadata.section field`)",
+ "label": "Should return 200 status code, items sorted by metadata.section field",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code-and-paginate-rules-with-a-limit-of-perpage",
+ "rawLine": " it(`Should return 200 status code and paginate rules with a limit of PerPage`, async () => {",
+ "line": " it(`Should return 200 status code and paginate rules with a limit of PerPage`)",
+ "label": "Should return 200 status code and paginate rules with a limit of PerPage",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/index.ts",
+ "fileName": "index.ts",
+ "directory": "x-pack/test/api_integration/apis/cloud_security_posture",
+ "tags": [
+ "FTR",
+ "API INTEGRATION"
+ ],
+ "lines": [
+ " describe('cloud_security_posture')"
+ ],
+ "testSuits": [
+ {
+ "id": "cloud_security_posture",
+ "rawLine": " describe('cloud_security_posture', function () {",
+ "line": " describe('cloud_security_posture')",
+ "label": "cloud_security_posture",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ],
+ "tree": [
+ {
+ "id": "cloud_security_posture",
+ "rawLine": " describe('cloud_security_posture', function () {",
+ "line": " describe('cloud_security_posture')",
+ "label": "cloud_security_posture",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ]
+ },
+ {
+ "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/rules/v1.ts",
+ "fileName": "v1.ts",
+ "directory": "x-pack/test/api_integration/apis/cloud_security_posture",
+ "tags": [
+ "FTR",
+ "API INTEGRATION"
+ ],
+ "lines": [
+ " describe('GET internal/cloud_security_posture/rules/_find')",
+ " it(`Should return 500 error code when not provide package policy id or benchmark id`)",
+ " it(`Should return 500 error code when provide both package policy id and benchmark id`)",
+ " it(`Should return 404 status code when the package policy ID does not exist`)",
+ " it(`Should return 200 status code and filter rules by benchmarkId`)",
+ " it(`Should return 200 status code, and only requested fields in the response`)",
+ " it(`Should return 200 status code, items sorted by metadata.section field`)",
+ " it(`Should return 200 status code and paginate rules with a limit of PerPage`)"
+ ],
+ "testSuits": [
+ {
+ "id": "get-internal/cloud_security_posture/rules/_find",
+ "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {",
+ "line": " describe('GET internal/cloud_security_posture/rules/_find')",
+ "label": "GET internal/cloud_security_posture/rules/_find",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id",
+ "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {",
+ "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)",
+ "label": "Should return 500 error code when not provide package policy id or benchmark id",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id",
+ "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {",
+ "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)",
+ "label": "Should return 500 error code when provide both package policy id and benchmark id",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-404-status-code-when-the-package-policy-id-does-not-exist",
+ "rawLine": " it(`Should return 404 status code when the package policy ID does not exist`, async () => {",
+ "line": " it(`Should return 404 status code when the package policy ID does not exist`)",
+ "label": "Should return 404 status code when the package policy ID does not exist",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code-and-filter-rules-by-benchmarkid",
+ "rawLine": " it(`Should return 200 status code and filter rules by benchmarkId`, async () => {",
+ "line": " it(`Should return 200 status code and filter rules by benchmarkId`)",
+ "label": "Should return 200 status code and filter rules by benchmarkId",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code,-and-only-requested-fields-in-the-response",
+ "rawLine": " it(`Should return 200 status code, and only requested fields in the response`, async () => {",
+ "line": " it(`Should return 200 status code, and only requested fields in the response`)",
+ "label": "Should return 200 status code, and only requested fields in the response",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code,-items-sorted-by-metadata.section-field",
+ "rawLine": " it(`Should return 200 status code, items sorted by metadata.section field`, async () => {",
+ "line": " it(`Should return 200 status code, items sorted by metadata.section field`)",
+ "label": "Should return 200 status code, items sorted by metadata.section field",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-200-status-code-and-paginate-rules-with-a-limit-of-perpage",
+ "rawLine": " it(`Should return 200 status code and paginate rules with a limit of PerPage`, async () => {",
+ "line": " it(`Should return 200 status code and paginate rules with a limit of PerPage`)",
+ "label": "Should return 200 status code and paginate rules with a limit of PerPage",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ }
+ ],
+ "tree": [
+ {
+ "id": "get-internal/cloud_security_posture/rules/_find",
+ "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {",
+ "line": " describe('GET internal/cloud_security_posture/rules/_find')",
+ "label": "GET internal/cloud_security_posture/rules/_find",
+ "indent": 2,
+ "type": "describe",
+ "isSkipped": false,
+ "isTodo": false,
+ "children": [
+ {
+ "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id",
+ "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {",
+ "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)",
+ "label": "Should return 500 error code when not provide package policy id or benchmark id",
+ "indent": 4,
+ "type": "it",
+ "isSkipped": false,
+ "isTodo": false
+ },
+ {
+ "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id",
+ "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {",
+ "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)",
+ "label": "Should return 500 error code when provide both package policy id and benchmark id",
"indent": 4,
"type": "it",
"isSkipped": false,
@@ -11580,11 +12485,10 @@
"directory": "x-pack/test/cloud_security_posture_api",
"tags": [
"FTR",
- "API INTEGRATION",
- "HAS SKIP"
+ "API INTEGRATION"
],
"lines": [
- " describe.skip('Verify update csp rules states API')",
+ " describe('Verify update csp rules states API')",
" it('mute benchmark rules successfully')",
" it('unmute rules successfully')",
" it('verify new rules are added and existing rules are set.')",
@@ -11596,12 +12500,12 @@
"testSuits": [
{
"id": "verify-update-csp-rules-states-api",
- "rawLine": " describe.skip('Verify update csp rules states API', async () => {",
- "line": " describe.skip('Verify update csp rules states API')",
+ "rawLine": " describe('Verify update csp rules states API', async () => {",
+ "line": " describe('Verify update csp rules states API')",
"label": "Verify update csp rules states API",
"indent": 2,
"type": "describe",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
},
{
@@ -11678,12 +12582,12 @@
"tree": [
{
"id": "verify-update-csp-rules-states-api",
- "rawLine": " describe.skip('Verify update csp rules states API', async () => {",
- "line": " describe.skip('Verify update csp rules states API')",
+ "rawLine": " describe('Verify update csp rules states API', async () => {",
+ "line": " describe('Verify update csp rules states API')",
"label": "Verify update csp rules states API",
"indent": 2,
"type": "describe",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false,
"children": [
{
@@ -11693,7 +12597,7 @@
"label": "mute benchmark rules successfully",
"indent": 4,
"type": "it",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
},
{
@@ -11703,7 +12607,7 @@
"label": "unmute rules successfully",
"indent": 4,
"type": "it",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
},
{
@@ -11713,7 +12617,7 @@
"label": "verify new rules are added and existing rules are set.",
"indent": 4,
"type": "it",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
},
{
@@ -11723,7 +12627,7 @@
"label": "mute detection rule successfully",
"indent": 4,
"type": "it",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
},
{
@@ -11733,7 +12637,7 @@
"label": "Expect to mute two benchmark rules and one detection rule",
"indent": 4,
"type": "it",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
},
{
@@ -11743,7 +12647,7 @@
"label": "Expect to save rules states when requesting to update empty object",
"indent": 4,
"type": "it",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
},
{
@@ -11753,7 +12657,7 @@
"label": "set wrong action input",
"indent": 4,
"type": "it",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
}
]
@@ -13670,11 +14574,10 @@
"fileName": "findings_onboarding.ts",
"directory": "x-pack/test/cloud_security_posture_functional",
"tags": [
- "FTR",
- "HAS SKIP"
+ "FTR"
],
"lines": [
- " describe.skip('Findings Page onboarding')",
+ " describe('Findings Page onboarding')",
" it('clicking on the `No integrations installed` prompt action button - `install CNVM`: navigates to the CNVM integration installation page')",
" it('clicking on the `No integrations installed` prompt action button - `install cloud posture intergation`: navigates to the CSPM integration installation page')",
" it('clicking on the `No integrations installed` prompt action button - `install kubernetes posture intergation`: navigates to the KSPM integration installation page')"
@@ -13682,12 +14585,12 @@
"testSuits": [
{
"id": "findings-page-onboarding",
- "rawLine": " describe.skip('Findings Page onboarding', function () {",
- "line": " describe.skip('Findings Page onboarding')",
+ "rawLine": " describe('Findings Page onboarding', function () {",
+ "line": " describe('Findings Page onboarding')",
"label": "Findings Page onboarding",
"indent": 2,
"type": "describe",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
},
{
@@ -13724,12 +14627,12 @@
"tree": [
{
"id": "findings-page-onboarding",
- "rawLine": " describe.skip('Findings Page onboarding', function () {",
- "line": " describe.skip('Findings Page onboarding')",
+ "rawLine": " describe('Findings Page onboarding', function () {",
+ "line": " describe('Findings Page onboarding')",
"label": "Findings Page onboarding",
"indent": 2,
"type": "describe",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false,
"children": [
{
@@ -13739,7 +14642,7 @@
"label": "clicking on the ",
"indent": 4,
"type": "it",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
},
{
@@ -13749,7 +14652,7 @@
"label": "clicking on the ",
"indent": 4,
"type": "it",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
},
{
@@ -13759,7 +14662,7 @@
"label": "clicking on the ",
"indent": 4,
"type": "it",
- "isSkipped": true,
+ "isSkipped": false,
"isTodo": false
}
]
diff --git a/x-pack/plugins/cloud_security_posture/common/scripts/get_tests.js b/x-pack/plugins/cloud_security_posture/common/scripts/get_tests.js
index d86598850a16..a70378380cca 100644
--- a/x-pack/plugins/cloud_security_posture/common/scripts/get_tests.js
+++ b/x-pack/plugins/cloud_security_posture/common/scripts/get_tests.js
@@ -21,6 +21,8 @@ const readline = require('readline');
// Directories to iterate over
const FTR_SERVERLESS =
'x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture';
+const FTR_SERVERLESS_API_INTEGRATION =
+ 'x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture';
const FTR_API_INTEGRATION = 'x-pack/test/api_integration/apis/cloud_security_posture';
const FTR_CSP_API = 'x-pack/test/cloud_security_posture_api';
const FTR_CSP_FUNCTIONAL = 'x-pack/test/cloud_security_posture_functional';
@@ -28,6 +30,7 @@ const UNIT_TEST_CSP = 'x-pack/plugins/cloud_security_posture';
const directoryPaths = [
FTR_SERVERLESS,
+ FTR_SERVERLESS_API_INTEGRATION,
FTR_API_INTEGRATION,
FTR_CSP_API,
FTR_CSP_FUNCTIONAL,
@@ -75,6 +78,7 @@ const getTags = (filePath, testSuits) => {
if (
filePath.startsWith(FTR_SERVERLESS) ||
+ filePath.startsWith(FTR_SERVERLESS_API_INTEGRATION) ||
filePath.startsWith(FTR_API_INTEGRATION) ||
filePath.startsWith(FTR_CSP_API) ||
filePath.startsWith(FTR_CSP_FUNCTIONAL)
@@ -82,7 +86,15 @@ const getTags = (filePath, testSuits) => {
tags.push('FTR');
}
- if (filePath.startsWith(FTR_API_INTEGRATION) || filePath.startsWith(FTR_CSP_API)) {
+ if (filePath.startsWith(FTR_SERVERLESS) || filePath.startsWith(FTR_SERVERLESS_API_INTEGRATION)) {
+ tags.push('SERVERLESS');
+ }
+
+ if (
+ filePath.startsWith(FTR_API_INTEGRATION) ||
+ filePath.startsWith(FTR_CSP_API) ||
+ filePath.startsWith(FTR_SERVERLESS_API_INTEGRATION)
+ ) {
tags.push('API INTEGRATION');
}
@@ -278,6 +290,7 @@ const groupTestsByDirectory = (testLogs) => {
const tagShieldsColors = {
FTR: 'blue',
UT: 'brightgreen',
+ SERVERLESS: 'pink',
'HAS SKIP': 'yellow',
'HAS TODO': 'green',
'API INTEGRATION': 'purple',
@@ -358,9 +371,10 @@ process.on('exit', () => {
console.log('🌟 Cloud Security Posture tests were processed successfully! ✨');
console.log(`ℳ MD file: file://${path.resolve(MD_FILE_PATH)}`);
console.log(`📄 Logs file: file://${path.resolve(CSP_TEST_LOGS_FILE_PATH)}`);
- console.log('📊 Copy Logs file content to the dedicated app\'s "data.json" for visualization.');
- console.log('⬛️ Dedicated app sandbox: https://codesandbox.io/p/sandbox/zen-smoke-vxgs2c');
console.log('🚀 Dedicated app: https://vxgs2c.csb.app/');
+ console.log(
+ '⬆️ The app will be automatically updated with the latest logs file from elastic/kibana/main'
+ );
} else {
console.error(`Logs generation has failed`);
}
From d6550efd3cc998b23d3de80d01a574e4c9073830 Mon Sep 17 00:00:00 2001
From: Davis McPhee
Date: Mon, 11 Mar 2024 16:50:00 -0300
Subject: [PATCH 028/100] [Discover] Remove static services (#178172)
## Summary
This PR removes static services from Discover and adds them to
`DiscoverServices` or creates a scoped equivalent managed by the plugin.
The goal is to make it easier to reason about the Discover lifecycle and
service lifetimes in preparation of Discover extension work.
### Checklist
- [ ] 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
- [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
- [ ] 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)
### For maintainers
- [ ] 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)
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
.../discover/public/__mocks__/services.ts | 9 +-
.../public/__mocks__/url_tracker.mock.ts | 3 +-
.../application/context/context_app.test.tsx | 2 +-
.../application/context/context_app_route.tsx | 17 +-
.../context/hooks/use_context_app_state.ts | 2 +-
.../application/discover_router.test.tsx | 7 -
.../public/application/discover_router.tsx | 3 -
.../application/doc/single_doc_route.tsx | 7 +-
.../discover/public/application/index.tsx | 6 +-
.../__stories__/discover_layout.stories.tsx | 3 -
.../layout/discover_documents.test.tsx | 3 -
.../layout/discover_layout.test.tsx | 3 -
.../layout/use_discover_histogram.ts | 5 +-
.../discover_sidebar_responsive.test.tsx | 8 -
.../sidebar/discover_sidebar_responsive.tsx | 11 +-
.../top_nav/discover_topnav.test.tsx | 3 -
.../components/top_nav/discover_topnav.tsx | 16 +-
.../main/discover_main_app.test.tsx | 5 -
.../main/discover_main_route.test.tsx | 7 -
.../application/main/discover_main_route.tsx | 9 +-
.../main/hooks/use_url_tracking.ts | 8 +-
.../discover_data_state_container.test.ts | 3 -
.../main/services/discover_state.ts | 9 +-
.../main/utils/update_filter_references.ts | 13 +-
.../application/not_found/not_found_route.tsx | 11 +-
src/plugins/discover/public/build_services.ts | 148 +++++++++++-------
.../discover_container.test.tsx | 6 +-
.../discover_container/discover_container.tsx | 30 ++--
.../components/discover_container/index.ts | 5 +-
...saved_search_url_conflict_callout.test.tsx | 13 +-
.../saved_search_url_conflict_callout.ts | 4 +-
.../profile_aware_locator.test.ts | 32 ++--
.../customizations/profile_aware_locator.ts | 11 +-
.../discover/public/history_service.ts | 41 +++++
.../saved_search_alias_match_redirect.test.ts | 13 +-
.../saved_search_alias_match_redirect.ts | 4 +-
.../discover/public/kibana_services.ts | 56 -------
src/plugins/discover/public/plugin.tsx | 128 +++++++--------
.../discover/public/utils/breadcrumbs.test.ts | 8 +-
.../discover/public/utils/breadcrumbs.ts | 2 +-
.../utils/initialize_kbn_url_tracking.test.ts | 15 +-
.../utils/initialize_kbn_url_tracking.ts | 50 +++---
src/plugins/discover/tsconfig.json | 1 -
.../public/controller/create_controller.ts | 2 +-
.../controller/custom_url_state_storage.ts | 2 +-
45 files changed, 353 insertions(+), 391 deletions(-)
create mode 100644 src/plugins/discover/public/history_service.ts
delete mode 100644 src/plugins/discover/public/kibana_services.ts
diff --git a/src/plugins/discover/public/__mocks__/services.ts b/src/plugins/discover/public/__mocks__/services.ts
index 6d617e38d4df..fff99c922375 100644
--- a/src/plugins/discover/public/__mocks__/services.ts
+++ b/src/plugins/discover/public/__mocks__/services.ts
@@ -15,6 +15,7 @@ import {
chromeServiceMock,
coreMock,
docLinksServiceMock,
+ scopedHistoryMock,
themeServiceMock,
} from '@kbn/core/public/mocks';
import {
@@ -42,6 +43,7 @@ import { LocalStorageMock } from './local_storage_mock';
import { createDiscoverDataViewsMock } from './data_views';
import { SearchSourceDependencies } from '@kbn/data-plugin/common';
import { SearchResponse } from '@elastic/elasticsearch/lib/api/types';
+import { urlTrackerMock } from './url_tracker.mock';
export function createDiscoverServicesMock(): DiscoverServices {
const dataPlugin = dataPluginMock.createStartContract();
@@ -146,12 +148,13 @@ export function createDiscoverServicesMock(): DiscoverServices {
core: corePluginMock,
charts: chartPluginMock.createSetupContract(),
chrome: chromeServiceMock.createStartContract(),
- history: () => ({
+ history: {
location: {
search: '',
},
listen: jest.fn(),
- }),
+ },
+ getScopedHistory: () => scopedHistoryMock.create(),
data: dataPlugin,
docLinks: docLinksServiceMock.createStartContract(),
capabilities: {
@@ -228,6 +231,8 @@ export function createDiscoverServicesMock(): DiscoverServices {
},
contextLocator: { getRedirectUrl: jest.fn(() => '') },
singleDocLocator: { getRedirectUrl: jest.fn(() => '') },
+ urlTracker: urlTrackerMock,
+ setHeaderActionMenu: jest.fn(),
} as unknown as DiscoverServices;
}
diff --git a/src/plugins/discover/public/__mocks__/url_tracker.mock.ts b/src/plugins/discover/public/__mocks__/url_tracker.mock.ts
index f7cc4d0a6142..c9e2558d66fc 100644
--- a/src/plugins/discover/public/__mocks__/url_tracker.mock.ts
+++ b/src/plugins/discover/public/__mocks__/url_tracker.mock.ts
@@ -5,7 +5,8 @@
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
-import { UrlTracker } from '../kibana_services';
+
+import { UrlTracker } from '../build_services';
export const urlTrackerMock = {
setTrackedUrl: jest.fn(),
diff --git a/src/plugins/discover/public/application/context/context_app.test.tsx b/src/plugins/discover/public/application/context/context_app.test.tsx
index b05dc3ca36e7..42ef78f6f757 100644
--- a/src/plugins/discover/public/application/context/context_app.test.tsx
+++ b/src/plugins/discover/public/application/context/context_app.test.tsx
@@ -59,7 +59,7 @@ describe('ContextApp test', () => {
notifications: { toasts: [] },
theme: { theme$: themeServiceMock.createStartContract().theme$ },
},
- history: () => history,
+ history,
fieldFormats: {
getDefaultInstance: jest.fn(() => ({ convert: (value: unknown) => value })),
getFormatterForField: jest.fn(() => ({ convert: (value: unknown) => value })),
diff --git a/src/plugins/discover/public/application/context/context_app_route.tsx b/src/plugins/discover/public/application/context/context_app_route.tsx
index 61def9cff3e6..d278b729e83a 100644
--- a/src/plugins/discover/public/application/context/context_app_route.tsx
+++ b/src/plugins/discover/public/application/context/context_app_route.tsx
@@ -9,12 +9,11 @@ import React, { useEffect, useMemo } from 'react';
import { useParams } from 'react-router-dom';
import { EuiEmptyPrompt } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
-import type { ScopedHistory } from '@kbn/core/public';
import { ContextApp } from './context_app';
import { LoadingIndicator } from '../../components/common/loading_indicator';
-import { getScopedHistory } from '../../kibana_services';
import { useDataView } from '../../hooks/use_data_view';
import type { ContextHistoryLocationState } from './services/locator';
+import { useDiscoverServices } from '../../hooks/use_discover_services';
export interface ContextUrlParams {
dataViewId: string;
@@ -22,9 +21,10 @@ export interface ContextUrlParams {
}
export function ContextAppRoute() {
+ const scopedHistory = useDiscoverServices().getScopedHistory();
const locationState = useMemo(
- () => getScopedHistory().location.state as ContextHistoryLocationState | undefined,
- []
+ () => scopedHistory?.location.state as ContextHistoryLocationState | undefined,
+ [scopedHistory?.location.state]
);
/**
@@ -32,18 +32,15 @@ export function ContextAppRoute() {
* Should be removed once url state will be deleted from context page.
*/
useEffect(() => {
- const scopedHistory = getScopedHistory() as ScopedHistory<
- ContextHistoryLocationState | undefined
- >;
- const unlisten = scopedHistory.listen((location) => {
+ const unlisten = scopedHistory?.listen((location) => {
const currentState = location.state;
if (!currentState?.referrer && locationState) {
const newLocation = { ...location, state: { ...currentState, ...locationState } };
scopedHistory.replace(newLocation);
}
});
- return () => unlisten();
- }, [locationState]);
+ return () => unlisten?.();
+ }, [locationState, scopedHistory]);
const { dataViewId: encodedDataViewId, id } = useParams();
const dataViewId = decodeURIComponent(encodedDataViewId);
diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts b/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts
index 74e4bab05332..5a05c53ada20 100644
--- a/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts
+++ b/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts
@@ -25,7 +25,7 @@ export function useContextAppState({
return getState({
defaultSize: parseInt(config.get(CONTEXT_DEFAULT_SIZE_SETTING), 10),
storeInSessionStorage: config.get('state:storeInSessionStorage'),
- history: history(),
+ history,
toasts: core.notifications.toasts,
uiSettings: config,
data: services.data,
diff --git a/src/plugins/discover/public/application/discover_router.test.tsx b/src/plugins/discover/public/application/discover_router.test.tsx
index 9ec7b7ed52fa..479abb551172 100644
--- a/src/plugins/discover/public/application/discover_router.test.tsx
+++ b/src/plugins/discover/public/application/discover_router.test.tsx
@@ -50,7 +50,6 @@ const gatherRoutes = (wrapper: ShallowWrapper) => {
};
const props: DiscoverRoutesProps = {
- isDev: false,
customizationCallbacks: [],
customizationContext: mockCustomizationContext,
};
@@ -157,7 +156,6 @@ describe('CustomDiscoverRoutes', () => {
);
expect(component.find(DiscoverRoutes).getElement()).toMatchObject(
@@ -165,7 +163,6 @@ describe('CustomDiscoverRoutes', () => {
prefix={addProfile('', mockProfile)}
customizationCallbacks={callbacks}
customizationContext={mockCustomizationContext}
- isDev={props.isDev}
/>
);
});
@@ -176,7 +173,6 @@ describe('CustomDiscoverRoutes', () => {
);
expect(component.find(NotFoundRoute).getElement()).toMatchObject();
@@ -195,7 +191,6 @@ describe('DiscoverRouter', () => {
history={history}
profileRegistry={profileRegistry}
customizationContext={mockCustomizationContext}
- isDev={props.isDev}
/>
);
gatherRoutes(component);
@@ -206,7 +201,6 @@ describe('DiscoverRouter', () => {
);
});
@@ -216,7 +210,6 @@ describe('DiscoverRouter', () => {
);
});
diff --git a/src/plugins/discover/public/application/discover_router.tsx b/src/plugins/discover/public/application/discover_router.tsx
index 70c56b864e8e..a9d252127013 100644
--- a/src/plugins/discover/public/application/discover_router.tsx
+++ b/src/plugins/discover/public/application/discover_router.tsx
@@ -26,7 +26,6 @@ export interface DiscoverRoutesProps {
prefix?: string;
customizationCallbacks: CustomizationCallback[];
customizationContext: DiscoverCustomizationContext;
- isDev: boolean;
}
export const DiscoverRoutes = ({ prefix, ...mainRouteProps }: DiscoverRoutesProps) => {
@@ -68,7 +67,6 @@ export const DiscoverRoutes = ({ prefix, ...mainRouteProps }: DiscoverRoutesProp
interface CustomDiscoverRoutesProps {
profileRegistry: DiscoverProfileRegistry;
customizationContext: DiscoverCustomizationContext;
- isDev: boolean;
}
export const CustomDiscoverRoutes = ({ profileRegistry, ...props }: CustomDiscoverRoutesProps) => {
@@ -96,7 +94,6 @@ export interface DiscoverRouterProps {
profileRegistry: DiscoverProfileRegistry;
customizationContext: DiscoverCustomizationContext;
history: History;
- isDev: boolean;
}
export const DiscoverRouter = ({
diff --git a/src/plugins/discover/public/application/doc/single_doc_route.tsx b/src/plugins/discover/public/application/doc/single_doc_route.tsx
index ad50a508fc0e..3a3d10dcd0e9 100644
--- a/src/plugins/discover/public/application/doc/single_doc_route.tsx
+++ b/src/plugins/discover/public/application/doc/single_doc_route.tsx
@@ -14,7 +14,6 @@ import { i18n } from '@kbn/i18n';
import { LoadingIndicator } from '../../components/common/loading_indicator';
import { Doc } from './components/doc';
import { useDiscoverServices } from '../../hooks/use_discover_services';
-import { getScopedHistory } from '../../kibana_services';
import { DiscoverError } from '../../components/common/error_alert';
import { useDataView } from '../../hooks/use_data_view';
import { DocHistoryLocationState } from './locator';
@@ -25,7 +24,7 @@ export interface DocUrlParams {
}
export const SingleDocRoute = () => {
- const { timefilter, core } = useDiscoverServices();
+ const { timefilter, core, getScopedHistory } = useDiscoverServices();
const { search } = useLocation();
const { dataViewId, index } = useParams();
@@ -33,8 +32,8 @@ export const SingleDocRoute = () => {
const id = query.get('id');
const locationState = useMemo(
- () => getScopedHistory().location.state as DocHistoryLocationState | undefined,
- []
+ () => getScopedHistory()?.location.state,
+ [getScopedHistory]
);
useExecutionContext(core.executionContext, {
diff --git a/src/plugins/discover/public/application/index.tsx b/src/plugins/discover/public/application/index.tsx
index df592ac7ffdb..89dd06d2104d 100644
--- a/src/plugins/discover/public/application/index.tsx
+++ b/src/plugins/discover/public/application/index.tsx
@@ -19,7 +19,6 @@ export interface RenderAppProps {
services: DiscoverServices;
profileRegistry: DiscoverProfileRegistry;
customizationContext: DiscoverCustomizationContext;
- isDev: boolean;
}
export const renderApp = ({
@@ -27,11 +26,9 @@ export const renderApp = ({
services,
profileRegistry,
customizationContext,
- isDev,
}: RenderAppProps) => {
- const { history: getHistory, capabilities, chrome, data, core } = services;
+ const { history, capabilities, chrome, data, core } = services;
- const history = getHistory();
if (!capabilities.discover.save) {
chrome.setBadge({
text: i18n.translate('discover.badge.readOnly.text', {
@@ -49,7 +46,6 @@ export const renderApp = ({
profileRegistry={profileRegistry}
customizationContext={customizationContext}
history={history}
- isDev={isDev}
/>,
{
theme: core.theme,
diff --git a/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx b/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx
index 4e143c80d96d..38b9fed87793 100644
--- a/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx
@@ -15,9 +15,6 @@ import { getDataViewMock } from '../../../../../__mocks__/__storybook_mocks__/ge
import { withDiscoverServices } from '../../../../../__mocks__/__storybook_mocks__/with_discover_services';
import { getDocumentsLayoutProps, getPlainRecordLayoutProps } from './get_layout_props';
import { DiscoverLayout, DiscoverLayoutProps } from '../discover_layout';
-import { setHeaderActionMenuMounter } from '../../../../../kibana_services';
-
-setHeaderActionMenuMounter(() => void 0);
const DiscoverLayoutStory = (layoutProps: DiscoverLayoutProps) => {
const [state, setState] = useState({});
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx
index 62c38fe43a3b..bb085774768d 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx
@@ -11,7 +11,6 @@ import { act } from 'react-dom/test-utils';
import { BehaviorSubject } from 'rxjs';
import { findTestSubject } from '@elastic/eui/lib/test';
import { mountWithIntl } from '@kbn/test-jest-helpers';
-import { setHeaderActionMenuMounter } from '../../../../kibana_services';
import { DataDocuments$ } from '../../services/discover_data_state_container';
import { discoverServiceMock } from '../../../../__mocks__/services';
import { FetchStatus } from '../../../types';
@@ -27,8 +26,6 @@ import { DiscoverCustomization, DiscoverCustomizationProvider } from '../../../.
import { createCustomizationService } from '../../../../customizations/customization_service';
import { DiscoverGrid } from '../../../../components/discover_grid';
-setHeaderActionMenuMounter(jest.fn());
-
const customisationService = createCustomizationService();
async function mountComponent(fetchStatus: FetchStatus, hits: EsHitRecord[]) {
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx
index 9788273ea5f6..2d61a4dbdd7d 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx
@@ -11,7 +11,6 @@ import { BehaviorSubject, of } from 'rxjs';
import { EuiPageSidebar } from '@elastic/eui';
import { mountWithIntl } from '@kbn/test-jest-helpers';
import type { Query, AggregateQuery } from '@kbn/es-query';
-import { setHeaderActionMenuMounter } from '../../../../kibana_services';
import { DiscoverLayout } from './discover_layout';
import { dataViewMock, esHitsMock } from '@kbn/discover-utils/src/__mocks__';
import { savedSearchMock } from '../../../../__mocks__/saved_search';
@@ -46,8 +45,6 @@ jest.mock('@elastic/eui', () => ({
useResizeObserver: jest.fn(() => ({ width: 1000, height: 1000 })),
}));
-setHeaderActionMenuMounter(jest.fn());
-
async function mountComponent(
dataView: DataView,
prevSidebarClosed?: boolean,
diff --git a/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts b/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts
index 871edb89d15a..52e184e25e16 100644
--- a/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts
+++ b/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts
@@ -28,7 +28,6 @@ import useObservable from 'react-use/lib/useObservable';
import type { RequestAdapter } from '@kbn/inspector-plugin/common';
import { useDiscoverCustomization } from '../../../../customizations';
import { useDiscoverServices } from '../../../../hooks/use_discover_services';
-import { getUiActions } from '../../../../kibana_services';
import { FetchStatus } from '../../../types';
import type { InspectorAdapters } from '../../hooks/use_inspector';
import { checkHitCount, sendErrorTo } from '../../hooks/use_saved_search_messages';
@@ -311,8 +310,6 @@ export const useDiscoverHistogram = ({
const histogramCustomization = useDiscoverCustomization('unified_histogram');
- const servicesMemoized = useMemo(() => ({ ...services, uiActions: getUiActions() }), [services]);
-
const filtersMemoized = useMemo(
() => [...(filters ?? []), ...customFilters],
[filters, customFilters]
@@ -324,7 +321,7 @@ export const useDiscoverHistogram = ({
return {
ref,
getCreationOptions,
- services: servicesMemoized,
+ services,
dataView: isPlainRecord ? textBasedDataView : dataView,
query: isPlainRecord ? textBasedQuery : query,
filters: filtersMemoized,
diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx
index 9c976b83c1dc..41a90d7a8520 100644
--- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx
+++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx
@@ -145,14 +145,6 @@ const mockCalcFieldCounts = jest.fn(() => {
return mockfieldCounts;
});
-jest.mock('../../../../kibana_services', () => ({
- getUiActions: jest.fn(() => {
- return {
- getTriggerCompatibleActions: jest.fn(() => []),
- };
- }),
-}));
-
jest.mock('../../utils/calc_field_counts', () => ({
calcFieldCounts: () => mockCalcFieldCounts(),
}));
diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx
index fc492bc48baa..ae1e26b54896 100644
--- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx
+++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx
@@ -31,7 +31,6 @@ import {
import { calcFieldCounts } from '../../utils/calc_field_counts';
import { FetchStatus, SidebarToggleState } from '../../../types';
import { DISCOVER_TOUR_STEP_ANCHOR_IDS } from '../../../../components/discover_tour';
-import { getUiActions } from '../../../../kibana_services';
import {
discoverSidebarReducer,
getInitialState,
@@ -331,14 +330,6 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps)
[canEditDataView, dataViewEditor, setDataViewEditorRef, onDataViewCreated, closeFieldListFlyout]
);
- const fieldListSidebarServices: UnifiedFieldListSidebarContainerProps['services'] = useMemo(
- () => ({
- ...services,
- uiActions: getUiActions(),
- }),
- [services]
- );
-
const searchBarCustomization = useDiscoverCustomization('search_bar');
const fieldListCustomization = useDiscoverCustomization('field_list');
const CustomDataViewPicker = searchBarCustomization?.CustomDataViewPicker;
@@ -405,7 +396,7 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps)
ref={initializeUnifiedFieldListSidebarContainerApi}
variant={fieldListVariant}
getCreationOptions={getCreationOptions}
- services={fieldListSidebarServices}
+ services={services}
dataView={selectedDataView}
trackUiMetric={trackUiMetric}
allFields={sidebarState.allFields}
diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx
index 1212772f6d59..4626eafec936 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx
@@ -11,7 +11,6 @@ import { mountWithIntl } from '@kbn/test-jest-helpers';
import { dataViewMock } from '@kbn/discover-utils/src/__mocks__';
import { DiscoverTopNav, DiscoverTopNavProps } from './discover_topnav';
import { TopNavMenu, TopNavMenuData } from '@kbn/navigation-plugin/public';
-import { setHeaderActionMenuMounter } from '../../../../kibana_services';
import { discoverServiceMock as mockDiscoverService } from '../../../../__mocks__/services';
import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock';
import { DiscoverMainProvider } from '../../services/discover_state_provider';
@@ -20,8 +19,6 @@ import type { DiscoverCustomizationId } from '../../../../customizations/customi
import { useDiscoverCustomization } from '../../../../customizations';
import { useKibana } from '@kbn/kibana-react-plugin/public';
-setHeaderActionMenuMounter(jest.fn());
-
jest.mock('@kbn/kibana-react-plugin/public', () => ({
...jest.requireActual('@kbn/kibana-react-plugin/public'),
useKibana: jest.fn(),
diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx
index 5c14592eff0c..0af9e4ab303a 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx
@@ -19,7 +19,6 @@ import {
} from '../../services/discover_state_provider';
import { useInternalStateSelector } from '../../services/discover_internal_state_container';
import { useDiscoverServices } from '../../../../hooks/use_discover_services';
-import { getHeaderActionMenuMounter } from '../../../../kibana_services';
import type { DiscoverStateContainer } from '../../services/discover_state';
import { onSaveSearch } from './on_save_search';
import { useDiscoverCustomization } from '../../../../customizations';
@@ -53,7 +52,15 @@ export const DiscoverTopNav = ({
onCancelClick,
}: DiscoverTopNavProps) => {
const services = useDiscoverServices();
- const { dataViewEditor, navigation, dataViewFieldEditor, data, uiSettings, dataViews } = services;
+ const {
+ dataViewEditor,
+ navigation,
+ dataViewFieldEditor,
+ data,
+ uiSettings,
+ dataViews,
+ setHeaderActionMenu,
+ } = services;
const query = useAppStateSelector((state) => state.query);
const adHocDataViews = useInternalStateSelector((state) => state.adHocDataViews);
const dataView = useInternalStateSelector((state) => state.dataView!);
@@ -164,7 +171,6 @@ export const DiscoverTopNav = ({
);
const { topNavBadges, topNavMenu } = useDiscoverTopNav({ stateContainer });
- const setMenuMountPoint = getHeaderActionMenuMounter();
const topNavProps = useMemo(() => {
if (stateContainer.customizationContext.inlineTopNav.enabled) {
return undefined;
@@ -173,10 +179,10 @@ export const DiscoverTopNav = ({
return {
badges: topNavBadges,
config: topNavMenu,
- setMenuMountPoint,
+ setMenuMountPoint: setHeaderActionMenu,
};
}, [
- setMenuMountPoint,
+ setHeaderActionMenu,
stateContainer.customizationContext.inlineTopNav.enabled,
topNavBadges,
topNavMenu,
diff --git a/src/plugins/discover/public/application/main/discover_main_app.test.tsx b/src/plugins/discover/public/application/main/discover_main_app.test.tsx
index 170f38e6fda3..43566c95a332 100644
--- a/src/plugins/discover/public/application/main/discover_main_app.test.tsx
+++ b/src/plugins/discover/public/application/main/discover_main_app.test.tsx
@@ -12,18 +12,13 @@ import { DataViewListItem } from '@kbn/data-views-plugin/public';
import { dataViewMock } from '@kbn/discover-utils/src/__mocks__';
import { DiscoverMainApp } from './discover_main_app';
import { DiscoverTopNav } from './components/top_nav/discover_topnav';
-import { setHeaderActionMenuMounter, setUrlTracker } from '../../kibana_services';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { discoverServiceMock } from '../../__mocks__/services';
import { Router } from '@kbn/shared-ux-router';
import { createMemoryHistory } from 'history';
-import { urlTrackerMock } from '../../__mocks__/url_tracker.mock';
import { getDiscoverStateMock } from '../../__mocks__/discover_state.mock';
import { DiscoverMainProvider } from './services/discover_state_provider';
-setHeaderActionMenuMounter(jest.fn());
-setUrlTracker(urlTrackerMock);
-
discoverServiceMock.data.query.timefilter.timefilter.getTime = () => {
return { from: '2020-05-14T11:05:13.590', to: '2020-05-14T11:20:13.590' };
};
diff --git a/src/plugins/discover/public/application/main/discover_main_route.test.tsx b/src/plugins/discover/public/application/main/discover_main_route.test.tsx
index 06d42f818287..496bb91f92cf 100644
--- a/src/plugins/discover/public/application/main/discover_main_route.test.tsx
+++ b/src/plugins/discover/public/application/main/discover_main_route.test.tsx
@@ -8,14 +8,12 @@
import React from 'react';
import { mountWithIntl } from '@kbn/test-jest-helpers';
import { waitFor } from '@testing-library/react';
-import { setHeaderActionMenuMounter, setScopedHistory } from '../../kibana_services';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { discoverServiceMock } from '../../__mocks__/services';
import { DiscoverMainRoute, MainRouteProps } from './discover_main_route';
import { MemoryRouter } from 'react-router-dom';
import { DiscoverMainApp } from './discover_main_app';
import { findTestSubject } from '@elastic/eui/lib/test';
-import { scopedHistoryMock } from '@kbn/core/public/mocks';
import {
createCustomizationService,
DiscoverCustomizationService,
@@ -42,8 +40,6 @@ jest.mock('./discover_main_app', () => {
};
});
-setScopedHistory(scopedHistoryMock.create());
-
describe('DiscoverMainRoute', () => {
beforeEach(() => {
mockCustomizationService = createCustomizationService();
@@ -112,7 +108,6 @@ describe('DiscoverMainRoute', () => {
const mountComponent = (hasESData = true, hasUserDataView = true) => {
const props: MainRouteProps = {
- isDev: false,
customizationCallbacks: [],
customizationContext: mockCustomizationContext,
};
@@ -136,5 +131,3 @@ function getServicesMock(hasESData = true, hasUserDataView = true) {
discoverServiceMock.core.http.get = jest.fn().mockResolvedValue({});
return discoverServiceMock;
}
-
-setHeaderActionMenuMounter(jest.fn());
diff --git a/src/plugins/discover/public/application/main/discover_main_route.tsx b/src/plugins/discover/public/application/main/discover_main_route.tsx
index 2bffb8d82a17..05263482662b 100644
--- a/src/plugins/discover/public/application/main/discover_main_route.tsx
+++ b/src/plugins/discover/public/application/main/discover_main_route.tsx
@@ -30,7 +30,6 @@ import { setBreadcrumbs } from '../../utils/breadcrumbs';
import { LoadingIndicator } from '../../components/common/loading_indicator';
import { DiscoverError } from '../../components/common/error_alert';
import { useDiscoverServices } from '../../hooks/use_discover_services';
-import { getScopedHistory, getUrlTracker } from '../../kibana_services';
import { useAlertResultsToast } from './hooks/use_alert_results_toast';
import { DiscoverMainProvider } from './services/discover_state_provider';
import {
@@ -52,7 +51,6 @@ interface DiscoverLandingParams {
export interface MainRouteProps {
customizationCallbacks: CustomizationCallback[];
stateStorageContainer?: IKbnUrlStateStorage;
- isDev: boolean;
customizationContext: DiscoverCustomizationContext;
}
@@ -71,6 +69,7 @@ export function DiscoverMainRoute({
http: { basePath },
dataViewEditor,
share,
+ getScopedHistory,
} = services;
const { id: savedSearchId } = useParams();
const [stateContainer, { reset: resetStateContainer }] = useDiscoverStateContainer({
@@ -96,8 +95,8 @@ export function DiscoverMainRoute({
* Get location state of scoped history only on initial load
*/
const historyLocationState = useMemo(
- () => getScopedHistory().location.state as MainHistoryLocationState | undefined,
- []
+ () => getScopedHistory()?.location.state,
+ [getScopedHistory]
);
useAlertResultsToast({
@@ -205,7 +204,7 @@ export function DiscoverMainRoute({
},
toastNotifications,
onBeforeRedirect() {
- getUrlTracker().setTrackedUrl('/');
+ services.urlTracker.setTrackedUrl('/');
},
theme: core.theme,
})(e);
diff --git a/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts b/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts
index 138ca8ce011d..88f69dceb44a 100644
--- a/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts
@@ -7,12 +7,14 @@
*/
import { useEffect } from 'react';
import { DiscoverSavedSearchContainer } from '../services/discover_saved_search_container';
-import { getUrlTracker } from '../../../kibana_services';
+import { useDiscoverServices } from '../../../hooks/use_discover_services';
/**
* Enable/disable kbn url tracking (That's the URL used when selecting Discover in the side menu)
*/
export function useUrlTracking(savedSearchContainer: DiscoverSavedSearchContainer) {
+ const { urlTracker } = useDiscoverServices();
+
useEffect(() => {
const subscription = savedSearchContainer.getCurrent$().subscribe((savedSearch) => {
const dataView = savedSearch.searchSource.getField('index');
@@ -20,11 +22,11 @@ export function useUrlTracking(savedSearchContainer: DiscoverSavedSearchContaine
return;
}
const trackingEnabled = Boolean(dataView.isPersisted() || savedSearch.id);
- getUrlTracker().setTrackingEnabled(trackingEnabled);
+ urlTracker.setTrackingEnabled(trackingEnabled);
});
return () => {
subscription.unsubscribe();
};
- }, [savedSearchContainer]);
+ }, [savedSearchContainer, urlTracker]);
}
diff --git a/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts b/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts
index 516d81cc9c3f..247a3a4d355a 100644
--- a/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts
+++ b/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts
@@ -12,8 +12,6 @@ import { dataViewMock, esHitsMockWithSort } from '@kbn/discover-utils/src/__mock
import { discoverServiceMock } from '../../../__mocks__/services';
import { savedSearchMockWithESQL } from '../../../__mocks__/saved_search';
import { FetchStatus } from '../../types';
-import { setUrlTracker } from '../../../kibana_services';
-import { urlTrackerMock } from '../../../__mocks__/url_tracker.mock';
import { DataDocuments$, RecordRawType } from './discover_data_state_container';
import { getDiscoverStateMock } from '../../../__mocks__/discover_state.mock';
import { fetchDocuments } from '../utils/fetch_documents';
@@ -28,7 +26,6 @@ jest.mock('@kbn/ebt-tools', () => ({
const mockFetchDocuments = fetchDocuments as unknown as jest.MockedFunction;
-setUrlTracker(urlTrackerMock);
describe('test getDataStateContainer', () => {
test('return is valid', async () => {
const stateContainer = getDiscoverStateMock({ isTimeBased: true });
diff --git a/src/plugins/discover/public/application/main/services/discover_state.ts b/src/plugins/discover/public/application/main/services/discover_state.ts
index aa6830008f5c..07db2d90857d 100644
--- a/src/plugins/discover/public/application/main/services/discover_state.ts
+++ b/src/plugins/discover/public/application/main/services/discover_state.ts
@@ -30,7 +30,6 @@ import { FetchStatus } from '../../types';
import { changeDataView } from '../hooks/utils/change_data_view';
import { buildStateSubscribe } from '../hooks/utils/build_state_subscribe';
import { addLog } from '../../../utils/add_log';
-import { getUrlTracker } from '../../../kibana_services';
import { DiscoverDataStateContainer, getDataStateContainer } from './discover_data_state_container';
import { DiscoverSearchSessionManager } from './discover_search_session';
import { DISCOVER_APP_LOCATOR, DiscoverAppLocatorParams } from '../../../../common';
@@ -307,12 +306,16 @@ export function getDiscoverStateContainer({
const newDataView = await services.dataViews.create({ ...prevDataView.toSpec(), id: uuidv4() });
services.dataViews.clearInstanceCache(prevDataView.id);
- updateFiltersReferences(prevDataView, newDataView);
+ updateFiltersReferences({
+ prevDataView,
+ nextDataView: newDataView,
+ services,
+ });
internalStateContainer.transitions.replaceAdHocDataViewWithId(prevDataView.id!, newDataView);
await appStateContainer.replaceUrlState({ index: newDataView.id });
const trackingEnabled = Boolean(newDataView.isPersisted() || savedSearchContainer.getId());
- getUrlTracker().setTrackingEnabled(trackingEnabled);
+ services.urlTracker.setTrackingEnabled(trackingEnabled);
return newDataView;
};
diff --git a/src/plugins/discover/public/application/main/utils/update_filter_references.ts b/src/plugins/discover/public/application/main/utils/update_filter_references.ts
index 8ab92d37a76f..2017e2d41ed9 100644
--- a/src/plugins/discover/public/application/main/utils/update_filter_references.ts
+++ b/src/plugins/discover/public/application/main/utils/update_filter_references.ts
@@ -12,10 +12,17 @@ import {
} from '@kbn/unified-search-plugin/public';
import { ActionExecutionContext } from '@kbn/ui-actions-plugin/public';
import type { DataView } from '@kbn/data-views-plugin/public';
-import { getUiActions } from '../../../kibana_services';
+import { DiscoverServices } from '../../../build_services';
-export const updateFiltersReferences = (prevDataView: DataView, nextDataView: DataView) => {
- const uiActions = getUiActions();
+export const updateFiltersReferences = ({
+ prevDataView,
+ nextDataView,
+ services: { uiActions },
+}: {
+ prevDataView: DataView;
+ nextDataView: DataView;
+ services: DiscoverServices;
+}) => {
const trigger = uiActions.getTrigger(UPDATE_FILTER_REFERENCES_TRIGGER);
const action = uiActions.getAction(UPDATE_FILTER_REFERENCES_ACTION);
action?.execute({
diff --git a/src/plugins/discover/public/application/not_found/not_found_route.tsx b/src/plugins/discover/public/application/not_found/not_found_route.tsx
index 4b2aa2b99022..90612394c40a 100644
--- a/src/plugins/discover/public/application/not_found/not_found_route.tsx
+++ b/src/plugins/discover/public/application/not_found/not_found_route.tsx
@@ -11,19 +11,18 @@ import { EuiCallOut } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { Redirect } from 'react-router-dom';
import { toMountPoint } from '@kbn/react-kibana-mount';
-import { getUrlTracker } from '../../kibana_services';
import { useDiscoverServices } from '../../hooks/use_discover_services';
let bannerId: string | undefined;
export function NotFoundRoute() {
const services = useDiscoverServices();
- const { urlForwarding, core, history } = services;
- const currentLocation = history().location.pathname;
+ const { urlForwarding, urlTracker, core, history } = services;
+ const currentLocation = history.location.pathname;
useEffect(() => {
const path = window.location.hash.substr(1);
- getUrlTracker().restorePreviousUrl();
+ urlTracker.restorePreviousUrl();
urlForwarding.navigateToLegacyKibanaUrl(path);
const bannerMessage = i18n.translate('discover.noMatchRoute.bannerTitleText', {
@@ -39,7 +38,7 @@ export function NotFoundRoute() {
id="discover.noMatchRoute.bannerText"
defaultMessage="Discover application doesn't recognize this route: {route}"
values={{
- route: history().location.state.referrer,
+ route: history.location.state.referrer,
}}
/>
@@ -57,7 +56,7 @@ export function NotFoundRoute() {
core.overlays.banners.remove(bannerId);
}
}, 15000);
- }, [core, history, urlForwarding]);
+ }, [core, history, urlForwarding, urlTracker]);
return ;
}
diff --git a/src/plugins/discover/public/build_services.ts b/src/plugins/discover/public/build_services.ts
index da82df24e184..d40edd879288 100644
--- a/src/plugins/discover/public/build_services.ts
+++ b/src/plugins/discover/public/build_services.ts
@@ -20,6 +20,8 @@ import {
NotificationsStart,
ApplicationStart,
AnalyticsServiceStart,
+ AppMountParameters,
+ ScopedHistory,
} from '@kbn/core/public';
import {
FilterManager,
@@ -51,9 +53,8 @@ import type { LensPublicStart } from '@kbn/lens-plugin/public';
import type { UiActionsStart } from '@kbn/ui-actions-plugin/public';
import type { SettingsStart } from '@kbn/core-ui-settings-browser';
import type { ContentClient } from '@kbn/content-management-plugin/public';
-import { memoize } from 'lodash';
+import { memoize, noop } from 'lodash';
import type { NoDataPagePluginStart } from '@kbn/no-data-page-plugin/public';
-import { getHistory } from './kibana_services';
import { DiscoverStartPlugins } from './plugin';
import { DiscoverContextAppLocator } from './application/context/services/locator';
import { DiscoverSingleDocLocator } from './application/doc/locator';
@@ -66,6 +67,12 @@ export interface HistoryLocationState {
referrer: string;
}
+export interface UrlTracker {
+ setTrackedUrl: (url: string) => void;
+ restorePreviousUrl: () => void;
+ setTrackingEnabled: (value: boolean) => void;
+}
+
export interface DiscoverServices {
application: ApplicationStart;
addBasePath: (path: string) => string;
@@ -76,7 +83,9 @@ export interface DiscoverServices {
data: DataPublicPluginStart;
docLinks: DocLinksStart;
embeddable: EmbeddableStart;
- history: () => History;
+ history: History;
+ getScopedHistory: () => ScopedHistory | undefined;
+ setHeaderActionMenu: AppMountParameters['setHeaderActionMenu'];
theme: CoreStart['theme'];
filterManager: FilterManager;
fieldFormats: FieldFormatsStart;
@@ -86,6 +95,7 @@ export interface DiscoverServices {
navigation: NavigationPublicPluginStart;
share?: SharePluginStart;
urlForwarding: UrlForwardingStart;
+ urlTracker: UrlTracker;
timefilter: TimefilterContract;
toastNotifications: ToastsStart;
notifications: NotificationsStart;
@@ -113,63 +123,83 @@ export interface DiscoverServices {
noDataPage?: NoDataPagePluginStart;
}
-export const buildServices = memoize(function (
- core: CoreStart,
- plugins: DiscoverStartPlugins,
- context: PluginInitializerContext,
- locator: DiscoverAppLocator,
- contextLocator: DiscoverContextAppLocator,
- singleDocLocator: DiscoverSingleDocLocator
-): DiscoverServices {
- const { usageCollection } = plugins;
- const storage = new Storage(localStorage);
-
- return {
- application: core.application,
- addBasePath: core.http.basePath.prepend,
- analytics: core.analytics,
- capabilities: core.application.capabilities,
- chrome: core.chrome,
+export const buildServices = memoize(
+ ({
core,
- data: plugins.data,
- docLinks: core.docLinks,
- embeddable: plugins.embeddable,
- theme: core.theme,
- fieldFormats: plugins.fieldFormats,
- filterManager: plugins.data.query.filterManager,
- history: getHistory,
- dataViews: plugins.data.dataViews,
- inspector: plugins.inspector,
- metadata: {
- branch: context.env.packageInfo.branch,
- },
- navigation: plugins.navigation,
- share: plugins.share,
- urlForwarding: plugins.urlForwarding,
- timefilter: plugins.data.query.timefilter.timefilter,
- toastNotifications: core.notifications.toasts,
- notifications: core.notifications,
- uiSettings: core.uiSettings,
- settings: core.settings,
- storage,
- trackUiMetric: usageCollection?.reportUiCounter.bind(usageCollection, 'discover'),
- dataViewFieldEditor: plugins.dataViewFieldEditor,
- http: core.http,
- spaces: plugins.spaces,
- dataViewEditor: plugins.dataViewEditor,
- triggersActionsUi: plugins.triggersActionsUi,
+ plugins,
+ context,
locator,
contextLocator,
singleDocLocator,
- expressions: plugins.expressions,
- charts: plugins.charts,
- savedObjectsTagging: plugins.savedObjectsTaggingOss?.getTaggingApi(),
- savedObjectsManagement: plugins.savedObjectsManagement,
- savedSearch: plugins.savedSearch,
- unifiedSearch: plugins.unifiedSearch,
- lens: plugins.lens,
- uiActions: plugins.uiActions,
- contentClient: plugins.contentManagement.client,
- noDataPage: plugins.noDataPage,
- };
-});
+ history,
+ scopedHistory,
+ urlTracker,
+ setHeaderActionMenu = noop,
+ }: {
+ core: CoreStart;
+ plugins: DiscoverStartPlugins;
+ context: PluginInitializerContext;
+ locator: DiscoverAppLocator;
+ contextLocator: DiscoverContextAppLocator;
+ singleDocLocator: DiscoverSingleDocLocator;
+ history: History;
+ scopedHistory?: ScopedHistory;
+ urlTracker: UrlTracker;
+ setHeaderActionMenu?: AppMountParameters['setHeaderActionMenu'];
+ }): DiscoverServices => {
+ const { usageCollection } = plugins;
+ const storage = new Storage(localStorage);
+
+ return {
+ application: core.application,
+ addBasePath: core.http.basePath.prepend,
+ analytics: core.analytics,
+ capabilities: core.application.capabilities,
+ chrome: core.chrome,
+ core,
+ data: plugins.data,
+ docLinks: core.docLinks,
+ embeddable: plugins.embeddable,
+ theme: core.theme,
+ fieldFormats: plugins.fieldFormats,
+ filterManager: plugins.data.query.filterManager,
+ history,
+ getScopedHistory: () => scopedHistory as ScopedHistory,
+ setHeaderActionMenu,
+ dataViews: plugins.data.dataViews,
+ inspector: plugins.inspector,
+ metadata: {
+ branch: context.env.packageInfo.branch,
+ },
+ navigation: plugins.navigation,
+ share: plugins.share,
+ urlForwarding: plugins.urlForwarding,
+ urlTracker,
+ timefilter: plugins.data.query.timefilter.timefilter,
+ toastNotifications: core.notifications.toasts,
+ notifications: core.notifications,
+ uiSettings: core.uiSettings,
+ settings: core.settings,
+ storage,
+ trackUiMetric: usageCollection?.reportUiCounter.bind(usageCollection, 'discover'),
+ dataViewFieldEditor: plugins.dataViewFieldEditor,
+ http: core.http,
+ spaces: plugins.spaces,
+ dataViewEditor: plugins.dataViewEditor,
+ triggersActionsUi: plugins.triggersActionsUi,
+ locator,
+ contextLocator,
+ singleDocLocator,
+ expressions: plugins.expressions,
+ charts: plugins.charts,
+ savedObjectsTagging: plugins.savedObjectsTaggingOss?.getTaggingApi(),
+ savedObjectsManagement: plugins.savedObjectsManagement,
+ savedSearch: plugins.savedSearch,
+ unifiedSearch: plugins.unifiedSearch,
+ lens: plugins.lens,
+ uiActions: plugins.uiActions,
+ contentClient: plugins.contentManagement.client,
+ noDataPage: plugins.noDataPage,
+ };
+ }
+);
diff --git a/src/plugins/discover/public/components/discover_container/discover_container.test.tsx b/src/plugins/discover/public/components/discover_container/discover_container.test.tsx
index 708fc93e63b8..3dc04996c483 100644
--- a/src/plugins/discover/public/components/discover_container/discover_container.test.tsx
+++ b/src/plugins/discover/public/components/discover_container/discover_container.test.tsx
@@ -13,7 +13,6 @@ import {
DiscoverContainerInternal,
type DiscoverContainerInternalProps,
} from './discover_container';
-import type { ScopedHistory } from '@kbn/core-application-browser';
import { discoverServiceMock } from '../../__mocks__/services';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { dataPluginMock } from '@kbn/data-plugin/public/mocks';
@@ -31,7 +30,7 @@ jest.mock('../../application/main', () => {
jest.mock('@kbn/kibana-react-plugin/public');
-const { history } = discoverServiceMock;
+const { getScopedHistory } = discoverServiceMock;
const customizeMock = jest.fn();
@@ -40,8 +39,7 @@ const TestComponent = (props: Partial) => {
)}
+ scopedHistory={props.scopedHistory ?? getScopedHistory()!}
getDiscoverServices={getDiscoverServicesMock}
/>
);
diff --git a/src/plugins/discover/public/components/discover_container/discover_container.tsx b/src/plugins/discover/public/components/discover_container/discover_container.tsx
index 7c345304b6f2..f9695f57f867 100644
--- a/src/plugins/discover/public/components/discover_container/discover_container.tsx
+++ b/src/plugins/discover/public/components/discover_container/discover_container.tsx
@@ -15,7 +15,6 @@ import type { IKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public';
import { DiscoverMainRoute } from '../../application/main';
import type { DiscoverServices } from '../../build_services';
import type { CustomizationCallback, DiscoverCustomizationContext } from '../../customizations';
-import { setHeaderActionMenuMounter, setScopedHistory } from '../../kibana_services';
import { LoadingIndicator } from '../common/loading_indicator';
export interface DiscoverContainerInternalProps {
@@ -30,7 +29,6 @@ export interface DiscoverContainerInternalProps {
scopedHistory: ScopedHistory;
customizationCallbacks: CustomizationCallback[];
stateStorageContainer?: IKbnUrlStateStorage;
- isDev: boolean;
isLoading?: boolean;
}
@@ -57,30 +55,27 @@ export const DiscoverContainerInternal = ({
overrideServices,
scopedHistory,
customizationCallbacks,
- isDev,
getDiscoverServices,
stateStorageContainer,
isLoading = false,
}: DiscoverContainerInternalProps) => {
- const [discoverServices, setDiscoverServices] = useState();
- const [initialized, setInitialized] = useState(false);
+ const [discoverServices, setDiscoverServices] = useState();
useEffect(() => {
- getDiscoverServices().then((svcs) => setDiscoverServices(svcs));
+ getDiscoverServices().then(setDiscoverServices);
}, [getDiscoverServices]);
- useEffect(() => {
- setScopedHistory(scopedHistory);
- setHeaderActionMenuMounter(() => {});
- setInitialized(true);
- }, [scopedHistory]);
-
- const services = useMemo(() => {
- if (!discoverServices) return;
- return { ...discoverServices, ...overrideServices };
- }, [discoverServices, overrideServices]);
+ const services = useMemo(() => {
+ return discoverServices
+ ? {
+ ...discoverServices,
+ ...overrideServices,
+ getScopedHistory: () => scopedHistory as ScopedHistory,
+ }
+ : undefined;
+ }, [discoverServices, overrideServices, scopedHistory]);
- if (!initialized || !services || isLoading) {
+ if (!services || isLoading) {
return (
@@ -103,7 +98,6 @@ export const DiscoverContainerInternal = ({
customizationCallbacks={customizationCallbacks}
customizationContext={customizationContext}
stateStorageContainer={stateStorageContainer}
- isDev={isDev}
/>
diff --git a/src/plugins/discover/public/components/discover_container/index.ts b/src/plugins/discover/public/components/discover_container/index.ts
index 0cc48d01dfaf..e6f0dcb16022 100644
--- a/src/plugins/discover/public/components/discover_container/index.ts
+++ b/src/plugins/discover/public/components/discover_container/index.ts
@@ -10,9 +10,6 @@ import { withSuspense } from '@kbn/shared-ux-utility';
import { lazy } from 'react';
import type { DiscoverContainerInternalProps } from './discover_container';
-export type DiscoverContainerProps = Omit<
- DiscoverContainerInternalProps,
- 'isDev' | 'getDiscoverServices'
->;
+export type DiscoverContainerProps = Omit;
export const DiscoverContainerInternal = withSuspense(lazy(() => import('./discover_container')));
diff --git a/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.test.tsx b/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.test.tsx
index d65bc83befa9..c004a3edd2e1 100644
--- a/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.test.tsx
+++ b/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.test.tsx
@@ -17,17 +17,16 @@ import { SavedSearch } from '@kbn/saved-search-plugin/public';
describe('SavedSearchURLConflictCallout', () => {
let spaces: ReturnType;
- let history: () => History;
+ let history: History;
beforeEach(() => {
spaces = spacesPluginMock.createStartContract();
spaces.ui.components.getLegacyUrlConflict = jest.fn().mockReturnValue('callout');
- history = () =>
- ({
- location: {
- search: '?_g=foo',
- },
- } as History);
+ history = {
+ location: {
+ search: '?_g=foo',
+ },
+ } as History;
});
test("should render URLConflictCallout in case of id's conflicts", () => {
diff --git a/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.ts b/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.ts
index 1fbb74d6130c..d74ce2a49a38 100644
--- a/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.ts
+++ b/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.ts
@@ -14,7 +14,7 @@ import { getSavedSearchUrl, SavedSearch } from '@kbn/saved-search-plugin/public'
interface SavedSearchURLConflictCalloutProps {
savedSearch?: SavedSearch;
spaces?: SpacesApi;
- history: () => History;
+ history: History;
}
export const SavedSearchURLConflictCallout = ({
@@ -34,7 +34,7 @@ export const SavedSearchURLConflictCallout = ({
},
}),
currentObjectId: savedSearch.id,
- otherObjectPath: `${getSavedSearchUrl(otherObjectId)}${history().location.search}`,
+ otherObjectPath: `${getSavedSearchUrl(otherObjectId)}${history.location.search}`,
otherObjectId,
});
}
diff --git a/src/plugins/discover/public/customizations/profile_aware_locator.test.ts b/src/plugins/discover/public/customizations/profile_aware_locator.test.ts
index 7916710b4e27..d0ef7a526dac 100644
--- a/src/plugins/discover/public/customizations/profile_aware_locator.test.ts
+++ b/src/plugins/discover/public/customizations/profile_aware_locator.test.ts
@@ -6,30 +6,24 @@
* Side Public License, v 1.
*/
+import { History } from 'history';
import { addProfile } from '../../common/customizations';
+import { HistoryLocationState } from '../build_services';
import { ProfileAwareLocator } from './profile_aware_locator';
-let mockPathname: string | undefined;
-
-jest.mock('../kibana_services', () => {
- const originalModule = jest.requireActual('../kibana_services');
- return {
- ...originalModule,
- getHistory: jest.fn(() => ({
- location: {
- pathname: mockPathname,
- },
- })),
- };
-});
+let mockHistory: History;
describe('ProfileAwareLocator', () => {
beforeEach(() => {
- mockPathname = undefined;
+ mockHistory = {
+ location: {
+ pathname: '',
+ },
+ } as History;
});
it('should inject profile', async () => {
- mockPathname = addProfile('', 'test');
+ mockHistory.location.pathname = addProfile('', 'test');
const locator = {
id: 'test',
migrations: {},
@@ -43,7 +37,7 @@ describe('ProfileAwareLocator', () => {
inject: jest.fn(),
extract: jest.fn(),
};
- const profileAwareLocator = new ProfileAwareLocator(locator);
+ const profileAwareLocator = new ProfileAwareLocator(locator, mockHistory);
const params = { foo: 'bar' };
const injectedParams = { foo: 'bar', profile: 'test' };
await profileAwareLocator.getLocation(params);
@@ -69,7 +63,7 @@ describe('ProfileAwareLocator', () => {
});
it('should not overwrite the provided profile with an injected one', async () => {
- mockPathname = addProfile('', 'test');
+ mockHistory.location.pathname = addProfile('', 'test');
const locator = {
id: 'test',
migrations: {},
@@ -83,7 +77,7 @@ describe('ProfileAwareLocator', () => {
inject: jest.fn(),
extract: jest.fn(),
};
- const profileAwareLocator = new ProfileAwareLocator(locator);
+ const profileAwareLocator = new ProfileAwareLocator(locator, mockHistory);
const params = { foo: 'bar', profile: 'test2' };
await profileAwareLocator.getLocation(params);
expect(locator.getLocation).toHaveBeenCalledWith(params);
@@ -121,7 +115,7 @@ describe('ProfileAwareLocator', () => {
inject: jest.fn(),
extract: jest.fn(),
};
- const profileAwareLocator = new ProfileAwareLocator(locator);
+ const profileAwareLocator = new ProfileAwareLocator(locator, mockHistory);
const params = { foo: 'bar' };
await profileAwareLocator.getLocation(params);
expect(locator.getLocation).toHaveBeenCalledWith(params);
diff --git a/src/plugins/discover/public/customizations/profile_aware_locator.ts b/src/plugins/discover/public/customizations/profile_aware_locator.ts
index 44c14c4e99aa..5339a7c382aa 100644
--- a/src/plugins/discover/public/customizations/profile_aware_locator.ts
+++ b/src/plugins/discover/public/customizations/profile_aware_locator.ts
@@ -17,15 +17,19 @@ import type {
LocatorNavigationParams,
} from '@kbn/share-plugin/common/url_service';
import type { LocatorPublic } from '@kbn/share-plugin/public';
+import { History } from 'history';
import type { DependencyList } from 'react';
import { getProfile } from '../../common/customizations';
-import { getHistory } from '../kibana_services';
+import { HistoryLocationState } from '../build_services';
export class ProfileAwareLocator implements LocatorPublic {
id: string;
migrations: MigrateFunctionsObject | GetMigrationFunctionObjectFn;
- constructor(private readonly locator: LocatorPublic) {
+ constructor(
+ private readonly locator: LocatorPublic,
+ private readonly history: History
+ ) {
this.id = locator.id;
this.migrations = locator.migrations;
}
@@ -35,8 +39,7 @@ export class ProfileAwareLocator implements Loca
return params;
}
- const history = getHistory();
- const { profile } = getProfile(history.location.pathname);
+ const { profile } = getProfile(this.history.location.pathname);
if (profile) {
params = { ...params, profile };
diff --git a/src/plugins/discover/public/history_service.ts b/src/plugins/discover/public/history_service.ts
new file mode 100644
index 000000000000..b96746697913
--- /dev/null
+++ b/src/plugins/discover/public/history_service.ts
@@ -0,0 +1,41 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { createHashHistory, History } from 'history';
+import { HistoryLocationState } from './build_services';
+
+export class HistoryService {
+ private history?: History;
+
+ /**
+ * Makes sure discover and context are using one instance of history.
+ */
+ getHistory() {
+ if (!this.history) {
+ this.history = createHashHistory();
+ this.history.listen(() => {
+ // keep at least one listener so that `history.location` always in sync
+ });
+ }
+
+ return this.history;
+ }
+
+ /**
+ * Discover currently uses two `history` instances: one from Kibana Platform and
+ * another from `history` package. Below function is used every time Discover
+ * app is loaded to synchronize both instances.
+ *
+ * This helper is temporary until https://github.com/elastic/kibana/issues/65161 is resolved.
+ */
+ syncHistoryLocations() {
+ const history = this.getHistory();
+ Object.assign(history.location, createHashHistory().location);
+ return history;
+ }
+}
diff --git a/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.test.ts b/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.test.ts
index 93f2c1be1ab6..e2ba306e57cb 100644
--- a/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.test.ts
+++ b/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.test.ts
@@ -16,16 +16,15 @@ import { spacesPluginMock } from '@kbn/spaces-plugin/public/mocks';
describe('useSavedSearchAliasMatchRedirect', () => {
let spaces: ReturnType;
- let history: () => History;
+ let history: History;
beforeEach(() => {
spaces = spacesPluginMock.createStartContract();
- history = () =>
- ({
- location: {
- search: '?_g=foo',
- },
- } as History);
+ history = {
+ location: {
+ search: '?_g=foo',
+ },
+ } as History;
});
test('should redirect in case of aliasMatch', () => {
diff --git a/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.ts b/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.ts
index 983701236e59..3f9ccda65b68 100644
--- a/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.ts
+++ b/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.ts
@@ -15,7 +15,7 @@ import { getSavedSearchUrl, SavedSearch } from '@kbn/saved-search-plugin/public'
interface SavedSearchAliasMatchRedirectProps {
savedSearch?: SavedSearch;
spaces?: SpacesApi;
- history: () => History;
+ history: History;
}
export const useSavedSearchAliasMatchRedirect = ({
@@ -31,7 +31,7 @@ export const useSavedSearchAliasMatchRedirect = ({
if (spaces && aliasTargetId && outcome === 'aliasMatch') {
await spaces.ui.redirectLegacyUrl({
- path: `${getSavedSearchUrl(aliasTargetId)}${history().location.search}`,
+ path: `${getSavedSearchUrl(aliasTargetId)}${history.location.search}`,
aliasPurpose,
objectNoun: i18n.translate('discover.savedSearchAliasMatchRedirect.objectNoun', {
defaultMessage: '{savedSearch} search',
diff --git a/src/plugins/discover/public/kibana_services.ts b/src/plugins/discover/public/kibana_services.ts
deleted file mode 100644
index ebab3c97c0ce..000000000000
--- a/src/plugins/discover/public/kibana_services.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0 and the Server Side Public License, v 1; you may not use this file except
- * in compliance with, at your election, the Elastic License 2.0 or the Server
- * Side Public License, v 1.
- */
-
-import { once } from 'lodash';
-import { createHashHistory } from 'history';
-import type { ScopedHistory, AppMountParameters } from '@kbn/core/public';
-import type { UiActionsStart } from '@kbn/ui-actions-plugin/public';
-import { createGetterSetter } from '@kbn/kibana-utils-plugin/public';
-import { HistoryLocationState } from './build_services';
-
-let uiActions: UiActionsStart;
-export interface UrlTracker {
- setTrackedUrl: (url: string) => void;
- restorePreviousUrl: () => void;
- setTrackingEnabled: (value: boolean) => void;
-}
-
-export const setUiActions = (pluginUiActions: UiActionsStart) => (uiActions = pluginUiActions);
-export const getUiActions = () => uiActions;
-
-export const [getHeaderActionMenuMounter, setHeaderActionMenuMounter] =
- createGetterSetter('headerActionMenuMounter');
-
-export const [getUrlTracker, setUrlTracker] = createGetterSetter('urlTracker');
-
-/**
- * Makes sure discover and context are using one instance of history.
- */
-export const getHistory = once(() => {
- const history = createHashHistory();
- history.listen(() => {
- // keep at least one listener so that `history.location` always in sync
- });
- return history;
-});
-
-/**
- * Discover currently uses two `history` instances: one from Kibana Platform and
- * another from `history` package. Below function is used every time Discover
- * app is loaded to synchronize both instances.
- *
- * This helper is temporary until https://github.com/elastic/kibana/issues/65161 is resolved.
- */
-export const syncHistoryLocations = () => {
- const h = getHistory();
- Object.assign(h.location, createHashHistory().location);
- return h;
-};
-
-export const [getScopedHistory, setScopedHistory] =
- createGetterSetter('scopedHistory');
diff --git a/src/plugins/discover/public/plugin.tsx b/src/plugins/discover/public/plugin.tsx
index 6441b30a06ec..a862c7844637 100644
--- a/src/plugins/discover/public/plugin.tsx
+++ b/src/plugins/discover/public/plugin.tsx
@@ -15,6 +15,7 @@ import {
CoreStart,
Plugin,
PluginInitializerContext,
+ ScopedHistory,
} from '@kbn/core/public';
import { UiActionsSetup, UiActionsStart } from '@kbn/ui-actions-plugin/public';
import { ExpressionsSetup, ExpressionsStart } from '@kbn/expressions-plugin/public';
@@ -46,15 +47,8 @@ import type { LensPublicStart } from '@kbn/lens-plugin/public';
import { TRUNCATE_MAX_HEIGHT, ENABLE_ESQL } from '@kbn/discover-utils';
import type { NoDataPagePluginStart } from '@kbn/no-data-page-plugin/public';
import { PLUGIN_ID } from '../common';
-import {
- setHeaderActionMenuMounter,
- setScopedHistory,
- setUiActions,
- setUrlTracker,
- syncHistoryLocations,
-} from './kibana_services';
import { registerFeature } from './register_feature';
-import { buildServices } from './build_services';
+import { buildServices, UrlTracker } from './build_services';
import { SearchEmbeddableFactory } from './embeddable';
import { ViewSavedSearchAction } from './embeddable/view_saved_search_action';
import { injectTruncateStyles } from './utils/truncate_styles';
@@ -83,6 +77,7 @@ import {
type DiscoverContainerProps,
} from './components/discover_container';
import { getESQLSearchProvider } from './global_search/search_provider';
+import { HistoryService } from './history_service';
/**
* @public
@@ -215,6 +210,9 @@ export class DiscoverPlugin
constructor(private readonly initializerContext: PluginInitializerContext) {}
private appStateUpdater = new BehaviorSubject(() => ({}));
+ private historyService = new HistoryService();
+ private scopedHistory?: ScopedHistory;
+ private urlTracker?: UrlTracker;
private stopUrlTracking: (() => void) | undefined = undefined;
private profileRegistry = createProfileRegistry();
private locator?: DiscoverAppLocator;
@@ -230,7 +228,6 @@ export class DiscoverPlugin
plugins: DiscoverSetupPlugins
): DiscoverSetup {
const baseUrl = core.http.basePath.prepend('/app/discover');
- const isDev = this.initializerContext.env.mode.dev;
if (plugins.share) {
const useHash = core.uiSettings.get('state:storeInSessionStorage');
@@ -275,11 +272,16 @@ export class DiscoverPlugin
appMounted,
appUnMounted,
setTrackingEnabled,
- } = initializeKbnUrlTracking(baseUrl, core, this.appStateUpdater, plugins);
- setUrlTracker({ setTrackedUrl, restorePreviousUrl, setTrackingEnabled });
- this.stopUrlTracking = () => {
- stopUrlTracker();
- };
+ } = initializeKbnUrlTracking({
+ baseUrl,
+ core,
+ navLinkUpdater$: this.appStateUpdater,
+ plugins,
+ getScopedHistory: () => this.scopedHistory!,
+ });
+
+ this.urlTracker = { setTrackedUrl, restorePreviousUrl, setTrackingEnabled };
+ this.stopUrlTracking = stopUrlTracker;
const appStateUpdater$ = combineLatest([
this.appStateUpdater,
@@ -305,31 +307,37 @@ export class DiscoverPlugin
visibleIn: ['globalSearch', 'sideNav', 'kibanaOverview'],
mount: async (params: AppMountParameters) => {
const [coreStart, discoverStartPlugins] = await core.getStartServices();
- setScopedHistory(params.history);
- setHeaderActionMenuMounter(params.setHeaderActionMenu);
- syncHistoryLocations();
+
+ // Store the current scoped history so initializeKbnUrlTracking can access it
+ this.scopedHistory = params.history;
+
+ this.historyService.syncHistoryLocations();
appMounted();
// dispatch synthetic hash change event to update hash history objects
// this is necessary because hash updates triggered by using popState won't trigger this event naturally.
- const unlistenParentHistory = params.history.listen(() => {
+ const unlistenParentHistory = this.scopedHistory.listen(() => {
window.dispatchEvent(new HashChangeEvent('hashchange'));
});
- const { locator, contextLocator, singleDocLocator } = await getProfileAwareLocators({
+ const { locator, contextLocator, singleDocLocator } = await this.getProfileAwareLocators({
locator: this.locator!,
contextLocator: this.contextLocator!,
singleDocLocator: this.singleDocLocator!,
});
- const services = buildServices(
- coreStart,
- discoverStartPlugins,
- this.initializerContext,
+ const services = buildServices({
+ core: coreStart,
+ plugins: discoverStartPlugins,
+ context: this.initializerContext,
locator,
contextLocator,
- singleDocLocator
- );
+ singleDocLocator,
+ history: this.historyService.getHistory(),
+ scopedHistory: this.scopedHistory,
+ urlTracker: this.urlTracker!,
+ setHeaderActionMenu: params.setHeaderActionMenu,
+ });
// make sure the data view list is up to date
discoverStartPlugins.dataViews.clearCache();
@@ -347,7 +355,6 @@ export class DiscoverPlugin
displayMode: 'standalone',
inlineTopNav: this.inlineTopNav,
},
- isDev,
});
return () => {
@@ -405,10 +412,8 @@ export class DiscoverPlugin
plugins.uiActions.addTriggerAction('CONTEXT_MENU_TRIGGER', viewSavedSearchAction);
plugins.uiActions.registerTrigger(SEARCH_EMBEDDABLE_CELL_ACTIONS_TRIGGER);
- setUiActions(plugins.uiActions);
injectTruncateStyles(core.uiSettings.get(TRUNCATE_MAX_HEIGHT));
- const isDev = this.initializerContext.env.mode.dev;
const getDiscoverServicesInternal = () => {
return this.getDiscoverServices(core, plugins);
};
@@ -426,15 +431,9 @@ export class DiscoverPlugin
return {
locator: this.locator,
- DiscoverContainer: (props: DiscoverContainerProps) => {
- return (
-
- );
- },
+ DiscoverContainer: (props: DiscoverContainerProps) => (
+
+ ),
registerCustomizationProfile: createRegisterCustomizationProfile(this.profileRegistry),
};
}
@@ -446,22 +445,46 @@ export class DiscoverPlugin
}
private getDiscoverServices = async (core: CoreStart, plugins: DiscoverStartPlugins) => {
- const { locator, contextLocator, singleDocLocator } = await getProfileAwareLocators({
+ const { locator, contextLocator, singleDocLocator } = await this.getProfileAwareLocators({
locator: this.locator!,
contextLocator: this.contextLocator!,
singleDocLocator: this.singleDocLocator!,
});
- return buildServices(
+ return buildServices({
core,
plugins,
- this.initializerContext,
+ context: this.initializerContext,
locator,
contextLocator,
- singleDocLocator
- );
+ singleDocLocator,
+ history: this.historyService.getHistory(),
+ urlTracker: this.urlTracker!,
+ });
};
+ /**
+ * Create profile-aware locators for internal use
+ */
+ private async getProfileAwareLocators({
+ locator,
+ contextLocator,
+ singleDocLocator,
+ }: {
+ locator: DiscoverAppLocator;
+ contextLocator: DiscoverContextAppLocator;
+ singleDocLocator: DiscoverSingleDocLocator;
+ }) {
+ const { ProfileAwareLocator } = await import('./customizations/profile_aware_locator');
+ const history = this.historyService.getHistory();
+
+ return {
+ locator: new ProfileAwareLocator(locator, history),
+ contextLocator: new ProfileAwareLocator(contextLocator, history),
+ singleDocLocator: new ProfileAwareLocator(singleDocLocator, history),
+ };
+ }
+
private registerEmbeddable(core: CoreSetup, plugins: DiscoverSetupPlugins) {
const getStartServices = async () => {
const [coreStart, deps] = await core.getStartServices();
@@ -480,24 +503,3 @@ export class DiscoverPlugin
plugins.embeddable.registerEmbeddableFactory(factory.type, factory);
}
}
-
-/**
- * Create profile-aware locators for internal use
- */
-const getProfileAwareLocators = async ({
- locator,
- contextLocator,
- singleDocLocator,
-}: {
- locator: DiscoverAppLocator;
- contextLocator: DiscoverContextAppLocator;
- singleDocLocator: DiscoverSingleDocLocator;
-}) => {
- const { ProfileAwareLocator } = await import('./customizations/profile_aware_locator');
-
- return {
- locator: new ProfileAwareLocator(locator),
- contextLocator: new ProfileAwareLocator(contextLocator),
- singleDocLocator: new ProfileAwareLocator(singleDocLocator),
- };
-};
diff --git a/src/plugins/discover/public/utils/breadcrumbs.test.ts b/src/plugins/discover/public/utils/breadcrumbs.test.ts
index da76998020e5..22c87cd4b50a 100644
--- a/src/plugins/discover/public/utils/breadcrumbs.test.ts
+++ b/src/plugins/discover/public/utils/breadcrumbs.test.ts
@@ -43,14 +43,12 @@ describe('Breadcrumbs', () => {
});
test('should set breadcrumbs with profile root path', () => {
+ const history = createMemoryHistory({});
+ history.push('/p/my-profile');
setBreadcrumbs({
services: {
...discoverServiceMock,
- history: () => {
- const history = createMemoryHistory({});
- history.push('/p/my-profile');
- return history;
- },
+ history,
},
titleBreadcrumbText: 'Saved Search',
});
diff --git a/src/plugins/discover/public/utils/breadcrumbs.ts b/src/plugins/discover/public/utils/breadcrumbs.ts
index 217fb7d4c00f..c260077e24f9 100644
--- a/src/plugins/discover/public/utils/breadcrumbs.ts
+++ b/src/plugins/discover/public/utils/breadcrumbs.ts
@@ -14,7 +14,7 @@ import type { DiscoverServices } from '../build_services';
const rootPath = '#/';
const getRootPath = ({ history }: DiscoverServices) => {
- const { profile } = getProfile(history().location.pathname);
+ const { profile } = getProfile(history.location.pathname);
return profile ? addProfile(rootPath, profile) : rootPath;
};
diff --git a/src/plugins/discover/public/utils/initialize_kbn_url_tracking.test.ts b/src/plugins/discover/public/utils/initialize_kbn_url_tracking.test.ts
index 3c508f76cfe4..e4a9a3edf6f6 100644
--- a/src/plugins/discover/public/utils/initialize_kbn_url_tracking.test.ts
+++ b/src/plugins/discover/public/utils/initialize_kbn_url_tracking.test.ts
@@ -7,7 +7,7 @@
*/
import { AppUpdater } from '@kbn/core/public';
import { BehaviorSubject, Observable } from 'rxjs';
-import { coreMock } from '@kbn/core/public/mocks';
+import { coreMock, scopedHistoryMock } from '@kbn/core/public/mocks';
import { DiscoverSetupPlugins } from '../plugin';
import { initializeKbnUrlTracking } from './initialize_kbn_url_tracking';
@@ -20,12 +20,13 @@ describe('initializeKbnUrlTracking', () => {
},
},
} as DiscoverSetupPlugins;
- const result = initializeKbnUrlTracking(
- '',
- coreMock.createSetup(),
- new BehaviorSubject(() => ({})),
- pluginsSetup
- );
+ const result = initializeKbnUrlTracking({
+ baseUrl: '',
+ core: coreMock.createSetup(),
+ navLinkUpdater$: new BehaviorSubject(() => ({})),
+ plugins: pluginsSetup,
+ getScopedHistory: () => scopedHistoryMock.create(),
+ });
expect(result).toMatchInlineSnapshot(`
Object {
"appMounted": [Function],
diff --git a/src/plugins/discover/public/utils/initialize_kbn_url_tracking.ts b/src/plugins/discover/public/utils/initialize_kbn_url_tracking.ts
index 4fdb1fa9742c..8ec6a0f0dfa3 100644
--- a/src/plugins/discover/public/utils/initialize_kbn_url_tracking.ts
+++ b/src/plugins/discover/public/utils/initialize_kbn_url_tracking.ts
@@ -5,40 +5,45 @@
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
-import { AppUpdater, CoreSetup } from '@kbn/core/public';
+import { AppUpdater, CoreSetup, ScopedHistory } from '@kbn/core/public';
import type { BehaviorSubject } from 'rxjs';
import { filter, map } from 'rxjs/operators';
-import { createGetterSetter, createKbnUrlTracker } from '@kbn/kibana-utils-plugin/public';
+import { createKbnUrlTracker } from '@kbn/kibana-utils-plugin/public';
import { replaceUrlHashQuery } from '@kbn/kibana-utils-plugin/common';
import { isFilterPinned } from '@kbn/es-query';
-import { getScopedHistory } from '../kibana_services';
import { SEARCH_SESSION_ID_QUERY_PARAM } from '../constants';
import type { DiscoverSetupPlugins } from '../plugin';
-/**
- * Store the setting of enabling / disabling url
- * it's should be disabled for ad-hoc data views to omit error messages
- * - When you've added an ad hoc data view in Discover
- * - Continued your work in different parts of Kibana
- * - You've closed the Kibana tab
- */
-export const [getUrlTracking, setUrlTracking] = createGetterSetter<{
- enabled: boolean;
-}>('urlTrackingEnabled');
/**
* It creates the kbn url tracker for Discover to listens to history changes and optionally to global state
* changes and updates the nav link url of to point to the last visited page
*/
-export function initializeKbnUrlTracking(
- baseUrl: string,
- core: CoreSetup,
- navLinkUpdater$: BehaviorSubject,
- plugins: DiscoverSetupPlugins
-) {
- setUrlTracking({ enabled: true });
+export function initializeKbnUrlTracking({
+ baseUrl,
+ core,
+ navLinkUpdater$,
+ plugins,
+ getScopedHistory,
+}: {
+ baseUrl: string;
+ core: CoreSetup;
+ navLinkUpdater$: BehaviorSubject;
+ plugins: DiscoverSetupPlugins;
+ getScopedHistory: () => ScopedHistory;
+}) {
+ /**
+ * Store the setting of enabling / disabling url
+ * it's should be disabled for ad-hoc data views to omit error messages
+ * - When you've added an ad hoc data view in Discover
+ * - Continued your work in different parts of Kibana
+ * - You've closed the Kibana tab
+ */
+ let urlTrackingEnabled = true;
+
const setTrackingEnabled = (value: boolean) => {
- setUrlTracking({ enabled: value });
+ urlTrackingEnabled = value;
};
+
const {
appMounted,
appUnMounted,
@@ -70,7 +75,7 @@ export function initializeKbnUrlTracking(
},
],
shouldTrackUrlUpdate: () => {
- return getUrlTracking().enabled;
+ return urlTrackingEnabled;
},
onBeforeNavLinkSaved: (newNavLink: string) => {
// Do not save SEARCH_SESSION_ID into nav link, because of possible edge cases
@@ -86,6 +91,7 @@ export function initializeKbnUrlTracking(
return newNavLink;
},
});
+
return {
appMounted,
appUnMounted,
diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json
index 3ca07c8ac348..4e6213e74579 100644
--- a/src/plugins/discover/tsconfig.json
+++ b/src/plugins/discover/tsconfig.json
@@ -60,7 +60,6 @@
"@kbn/core-saved-objects-api-server",
"@kbn/cell-actions",
"@kbn/shared-ux-utility",
- "@kbn/core-application-browser",
"@kbn/core-saved-objects-server",
"@kbn/discover-utils",
"@kbn/search-errors",
diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts b/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts
index daaa5b27029c..639a1a416092 100644
--- a/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts
+++ b/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts
@@ -59,7 +59,7 @@ export const createLogsExplorerControllerFactory =
});
const discoverServices: LogsExplorerDiscoverServices = {
data: customData,
- history: () => customMemoryHistory,
+ history: customMemoryHistory,
uiSettings: customUiSettings,
filterManager: customData.query.filterManager,
timefilter: customData.query.timefilter.timefilter,
diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/controller/custom_url_state_storage.ts b/x-pack/plugins/observability_solution/logs_explorer/public/controller/custom_url_state_storage.ts
index eb2f003f2662..f07c99bb0067 100644
--- a/x-pack/plugins/observability_solution/logs_explorer/public/controller/custom_url_state_storage.ts
+++ b/x-pack/plugins/observability_solution/logs_explorer/public/controller/custom_url_state_storage.ts
@@ -9,7 +9,7 @@ import { createKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public';
import { createMemoryHistory } from 'history';
import { LogsExplorerDiscoverServices } from './types';
-type DiscoverHistory = ReturnType;
+type DiscoverHistory = LogsExplorerDiscoverServices['history'];
/**
* Create a MemoryHistory instance. It is initialized with an application state
From cd16d03ca9627b21452eff6b72d771318e85557f Mon Sep 17 00:00:00 2001
From: Maxim Palenov
Date: Mon, 11 Mar 2024 21:40:00 +0100
Subject: [PATCH 029/100] [Security Solution] Fix coverage overview console
errors (#178126)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
**Fixes: https://github.com/elastic/kibana/issues/164846**
## Summary
This PR fixes MITRE ATT&CK® Coverage Overview dashboard console errors when the page loads or filter is changed.
## Details
An error message `Exception list is null when it never should be. This indicates potentially that saved object migrations did not run correctly. Returning empty exception list` appears each time MITRE ATT&CK® Coverage Overview dashboard is loaded or filter is changed (which lead to data reloading).
If one tried to find the source of the console error message it lead to [kibana/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.ts](https://github.com/elastic/kibana/blob/6cb73aaec15b230a65d2e17a9d6ef970a1061709/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.ts#L30-L33). It happens whenever there is an attempt to inject rule exceptions from SO references. This operations happens for every rule wrapped in `securityRuleTypeWrapper` and registered in `alerting` plugin. Whenever such rule if fetched via `rulesClient.find()` it invokes registered `useSavedObjectReferences.injectReferences` finally invoking mentioned above `inject_exceptions_list.ts`. Coverage Overview API endpoint fetches only necessary set of rule fields (`name`, `enabled`, `params.threat`) to reduce transferring unnecessary data. It's not hard to guess that `params.exceptionsList` is missed and it ends up to be `undefined` (it's always an array in a SO) when the validation happens in `inject_exceptions_list.ts`. So it leads to the warning message appearing.
This PR removes redundant `exceptionsList` injection validation.
---
.../inject_exceptions_list.test.ts | 17 ++++++++---------
.../inject_exceptions_list.ts | 11 ++---------
2 files changed, 10 insertions(+), 18 deletions(-)
diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.test.ts
index d653591493a3..ab9367400ed1 100644
--- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.test.ts
+++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.test.ts
@@ -46,15 +46,14 @@ describe('inject_exceptions_list', () => {
).toEqual([]);
});
- test('logs expect error message if the exceptionsList is undefined', () => {
- injectExceptionsReferences({
- logger,
- exceptionsList: undefined as unknown as RuleParams['exceptionsList'],
- savedObjectReferences: mockSavedObjectReferences(),
- });
- expect(logger.error).toBeCalledWith(
- 'Exception list is null when it never should be. This indicates potentially that saved object migrations did not run correctly. Returning empty exception list'
- );
+ test('returns empty array given undefined', () => {
+ expect(
+ injectExceptionsReferences({
+ logger,
+ exceptionsList: undefined as unknown as RuleParams['exceptionsList'],
+ savedObjectReferences: mockSavedObjectReferences(),
+ })
+ ).toEqual([]);
});
test('returns empty array given an empty array for "exceptionsList"', () => {
diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.ts
index 3baab73f1e50..163aeab18f64 100644
--- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.ts
+++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.ts
@@ -26,14 +26,8 @@ export const injectExceptionsReferences = ({
logger: Logger;
exceptionsList: RuleParams['exceptionsList'];
savedObjectReferences: SavedObjectReference[];
-}): RuleParams['exceptionsList'] => {
- if (exceptionsList == null) {
- logger.error(
- 'Exception list is null when it never should be. This indicates potentially that saved object migrations did not run correctly. Returning empty exception list'
- );
- return [];
- }
- return exceptionsList.map((exceptionItem, index) => {
+}): RuleParams['exceptionsList'] =>
+ (exceptionsList ?? []).map((exceptionItem, index) => {
const savedObjectReference = getSavedObjectReferenceForExceptionsList({
logger,
index,
@@ -54,4 +48,3 @@ export const injectExceptionsReferences = ({
return exceptionItem;
}
});
-};
From e31b5f31c05b4acdd8acbfa2bb7a231337c9467f Mon Sep 17 00:00:00 2001
From: Panagiota Mitsopoulou
Date: Mon, 11 Mar 2024 21:52:38 +0100
Subject: [PATCH 030/100] [SLO] Rename Attach to dashboard to Add dashboard for
slo embeddables (#178382)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## 🍒 Summary
This PR renames `Attach to Dashboard` to `Add to Dashboard` in following
places
- SLO list page > SLO Card actions
- SLO detail page > Error budget burn down chart
cc @ThomThomson
---
.../slo_details/components/error_budget_actions.tsx | 12 ++++++------
.../slos/components/card_view/slo_card_item.tsx | 4 ++--
.../pages/slos/components/slo_item_actions.tsx | 12 ++++++------
3 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/x-pack/plugins/observability_solution/observability/public/pages/slo_details/components/error_budget_actions.tsx b/x-pack/plugins/observability_solution/observability/public/pages/slo_details/components/error_budget_actions.tsx
index 614aaf3456de..8770375530e1 100644
--- a/x-pack/plugins/observability_solution/observability/public/pages/slo_details/components/error_budget_actions.tsx
+++ b/x-pack/plugins/observability_solution/observability/public/pages/slo_details/components/error_budget_actions.tsx
@@ -16,7 +16,7 @@ interface Props {
export function ErrorBudgetActions({ setDashboardAttachmentReady }: Props) {
const [isActionsPopoverOpen, setIsActionsPopoverOpen] = useState(false);
- const handleAttachToDashboard = () => {
+ const handleAddToDashboard = () => {
setIsActionsPopoverOpen(false);
if (setDashboardAttachmentReady) {
setDashboardAttachmentReady(true);
@@ -38,12 +38,12 @@ export function ErrorBudgetActions({ setDashboardAttachmentReady }: Props) {
- {i18n.translate('xpack.observability.slo.item.actions.attachToDashboard', {
- defaultMessage: 'Attach to Dashboard',
+ {i18n.translate('xpack.observability.slo.item.actions.addToDashboard', {
+ defaultMessage: 'Add to Dashboard',
})}
diff --git a/x-pack/plugins/observability_solution/observability/public/pages/slos/components/card_view/slo_card_item.tsx b/x-pack/plugins/observability_solution/observability/public/pages/slos/components/card_view/slo_card_item.tsx
index d408f6e73b10..e0dd19f34a7f 100644
--- a/x-pack/plugins/observability_solution/observability/public/pages/slos/components/card_view/slo_card_item.tsx
+++ b/x-pack/plugins/observability_solution/observability/public/pages/slos/components/card_view/slo_card_item.tsx
@@ -149,12 +149,12 @@ export function SloCardItem({ slo, rules, activeAlerts, historicalSummary, cards
{isDashboardAttachmentReady ? (
{
+ const handleAddToDashboard = () => {
setIsActionsPopoverOpen(false);
if (setDashboardAttachmentReady) {
setDashboardAttachmentReady(true);
@@ -213,12 +213,12 @@ export function SloItemActions({
,
- {i18n.translate('xpack.observability.slo.item.actions.attachToDashboard', {
- defaultMessage: 'Attach to Dashboard',
+ {i18n.translate('xpack.observability.slo.item.actions.addToDashboard', {
+ defaultMessage: 'Add to Dashboard',
})}
,
]}
From f29fc9a111fe9bfaa828fa0123ef6fc43cc6f367 Mon Sep 17 00:00:00 2001
From: Justin Kambic
Date: Mon, 11 Mar 2024 16:55:31 -0400
Subject: [PATCH 031/100] [Synthetics] Omit the request `Content-Type` header
if body check is empty (#178399)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Summary
Resolves #175703.
If the user does not specify a body verification check, we should not
check the request's `Content-Type` header. This is too opinionated and
causes problems for some users. More details in the linked issue.
## Testing
Testing this is quite easy. Go to the Synthetics UI, start creating a
new HTTP monitor. Be sure to give a name, URL, and choose a location.
On `main`, if you click the _Inspect Configuration_ button at the top of
the create monitor form, you should see the `check.request.headers`
field no matter what you have specified.
Now checkout this PR branch and do the same. You should only see the
field if you expand _Advanced options_ and specify a **Request body** to
check.
### Without request body
### With request body
---------
Co-authored-by: Cauê Marcondes <55978943+cauemarcondes@users.noreply.github.com>
---
.../components/monitor_add_edit/form/field_config.tsx | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx
index b80c4ccb773b..34996f243460 100644
--- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx
+++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx
@@ -795,7 +795,9 @@ export const FIELD = (readOnly?: boolean): FieldMap => ({
return {
'data-test-subj': 'syntheticsHeaderFieldRequestHeaders',
readOnly,
- contentMode: (requestBody as RequestBodyCheck).type,
+ contentMode: !!(requestBody as RequestBodyCheck)?.value
+ ? (requestBody as RequestBodyCheck).type
+ : undefined,
};
},
},
From 714796b9c3c5d43f0681ebf6a58f36ad56e8bcf3 Mon Sep 17 00:00:00 2001
From: Rodney Norris
Date: Mon, 11 Mar 2024 16:15:33 -0500
Subject: [PATCH 032/100] [Search] fix: update vector search snippets to use
try in console button (#178402)
## Summary
Updating the Vector Search page to use the shared Try In Console button,
and then fixing the layout issues from using it.
This ensures that the code snippets can be used in the Persistent
console instead of opening a new tab.
![image](https://github.com/elastic/kibana/assets/1972968/6be12953-060f-47b6-a7b8-30896a35e112)
---
.../dev_tools_console_code_block.tsx | 66 +++++++++----------
.../translations/translations/fr-FR.json | 1 -
.../translations/translations/ja-JP.json | 1 -
.../translations/translations/zh-CN.json | 1 -
4 files changed, 30 insertions(+), 39 deletions(-)
diff --git a/x-pack/plugins/enterprise_search/public/applications/vector_search/components/dev_tools_console_code_block/dev_tools_console_code_block.tsx b/x-pack/plugins/enterprise_search/public/applications/vector_search/components/dev_tools_console_code_block/dev_tools_console_code_block.tsx
index afa9d37d4fa5..f77f2585d251 100644
--- a/x-pack/plugins/enterprise_search/public/applications/vector_search/components/dev_tools_console_code_block/dev_tools_console_code_block.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/vector_search/components/dev_tools_console_code_block/dev_tools_console_code_block.tsx
@@ -8,7 +8,6 @@
import React from 'react';
import { useValues } from 'kea';
-import { compressToEncodedURIComponent } from 'lz-string';
import {
EuiButtonEmpty,
@@ -16,11 +15,13 @@ import {
EuiCodeBlockProps,
EuiCopy,
EuiFlexGroup,
+ EuiFlexItem,
EuiHorizontalRule,
EuiPanel,
EuiThemeProvider,
} from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
+import { TryInConsoleButton } from '@kbn/search-api-panels';
import { KibanaLogic } from '../../../shared/kibana';
@@ -32,49 +33,42 @@ export const DevToolsConsoleCodeBlock: React.FC =
children,
...props
}) => {
- const {
- application,
- share: { url },
- } = useValues(KibanaLogic);
+ const { application, consolePlugin, share } = useValues(KibanaLogic);
- const consolePreviewLink =
- !!application?.capabilities?.dev_tools?.show &&
- url.locators
- .get('CONSOLE_APP_LOCATOR')
- ?.useUrl(
- { loadFrom: `data:text/plain,${compressToEncodedURIComponent(children)}` },
- undefined,
- []
- );
+ const showConsoleLink = !!application?.capabilities?.dev_tools?.show;
return (
-
- {consolePreviewLink && (
-
-
+ {showConsoleLink && (
+
+
-
+
)}
-
- {(copy) => (
-
-
-
- )}
-
+
+
+ {(copy) => (
+
+
+
+ )}
+
+
Date: Mon, 11 Mar 2024 22:11:39 +0000
Subject: [PATCH 033/100] skip flaky suite (#171279)
---
x-pack/plugins/osquery/cypress/e2e/all/packs_integration.cy.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/x-pack/plugins/osquery/cypress/e2e/all/packs_integration.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/packs_integration.cy.ts
index 382171697451..68c151d5138f 100644
--- a/x-pack/plugins/osquery/cypress/e2e/all/packs_integration.cy.ts
+++ b/x-pack/plugins/osquery/cypress/e2e/all/packs_integration.cy.ts
@@ -187,7 +187,8 @@ describe('ALL - Packs', { tags: ['@ess', '@serverless'] }, () => {
navigateTo('/app/osquery/packs');
});
- describe('add proper shard to policies packs config', () => {
+ // FLAKY: https://github.com/elastic/kibana/issues/171279
+ describe.skip('add proper shard to policies packs config', () => {
const globalPack = 'globalPack' + generateRandomStringName(1)[0];
const agentPolicy = 'testGlobal' + generateRandomStringName(1)[0];
let globalPackId: string;
From 716c90fa3b53ebc4f940b3d06ad9a965a39127d6 Mon Sep 17 00:00:00 2001
From: Tiago Costa
Date: Mon, 11 Mar 2024 22:13:49 +0000
Subject: [PATCH 034/100] skip flaky suite (#177101)
---
.../trial_license_complete_tier/execution_logic/query.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/query.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/query.ts
index 79984938a792..57f5c0c536dc 100644
--- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/query.ts
+++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/query.ts
@@ -98,7 +98,8 @@ export default ({ getService }: FtrProviderContext) => {
const dataPathBuilder = new EsArchivePathBuilder(isServerless);
const auditbeatPath = dataPathBuilder.getPath('auditbeat/hosts');
- describe('@ess @serverless Query type rules', () => {
+ // FLAKY: https://github.com/elastic/kibana/issues/177101
+ describe.skip('@ess @serverless Query type rules', () => {
before(async () => {
await esArchiver.load(auditbeatPath);
await esArchiver.load('x-pack/test/functional/es_archives/security_solution/alerts/8.8.0', {
From 5e09b74e9cde6d66a290a15e5a41799d462366ef Mon Sep 17 00:00:00 2001
From: DeDe Morton
Date: Mon, 11 Mar 2024 15:59:38 -0700
Subject: [PATCH 035/100] Add statement about defining security rules (#178463)
## Summary
Pushing a commit that _should_ have been part of
https://github.com/elastic/kibana/pull/177525
### 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)
---
docs/user/alerting/rule-types.asciidoc | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/docs/user/alerting/rule-types.asciidoc b/docs/user/alerting/rule-types.asciidoc
index 4791dd4521c5..c7bd85fa20ed 100644
--- a/docs/user/alerting/rule-types.asciidoc
+++ b/docs/user/alerting/rule-types.asciidoc
@@ -3,7 +3,8 @@
== Rule types
A rule is a set of <>, <>, and <> that enable notifications. {kib} provides rules built into the {stack} and rules registered by one of the {kib} apps.
-You can create most rules types in < {rules-ui}>>. For information on creating security rules, refer to {security-guide}/rules-ui-create.html[Create a detection rule].
+You can create most rules types in < {rules-ui}>>.
+Security rules must be defined in the Security app. For more information, refer to the documentation about {security-guide}/rules-ui-create.html[creating a detection rule].
[NOTE]
==============================================
From 05dc9213e860e2885806e966746abc1d2ec0d7dd Mon Sep 17 00:00:00 2001
From: Tiago Costa
Date: Tue, 12 Mar 2024 00:45:47 +0000
Subject: [PATCH 036/100] skip flaky suite (#178367)
---
.../cypress/e2e/explore/inspect/inspect_button.cy.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts
index 86309e80fd7e..4d0fbc7e2153 100644
--- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts
+++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts
@@ -24,7 +24,8 @@ import { postDataView } from '../../../tasks/api_calls/common';
const DATA_VIEW = 'auditbeat-*';
-describe('Inspect Explore pages', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => {
+// FLAKY: https://github.com/elastic/kibana/issues/178367
+describe.skip('Inspect Explore pages', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => {
before(() => {
// illegal_argument_exception: unknown setting [index.lifecycle.name]
cy.task('esArchiverLoad', { archiveName: 'risk_users' });
From a6a2e69676953b3a93cc028ed01a8ce5e89ab1b3 Mon Sep 17 00:00:00 2001
From: Tiago Costa
Date: Tue, 12 Mar 2024 00:46:30 +0000
Subject: [PATCH 037/100] skip flaky suite (#174205)
---
.../public/components/use_create_case_modal/index.test.tsx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/x-pack/plugins/cases/public/components/use_create_case_modal/index.test.tsx b/x-pack/plugins/cases/public/components/use_create_case_modal/index.test.tsx
index b0985bbc097c..fa7e0213166e 100644
--- a/x-pack/plugins/cases/public/components/use_create_case_modal/index.test.tsx
+++ b/x-pack/plugins/cases/public/components/use_create_case_modal/index.test.tsx
@@ -19,7 +19,8 @@ jest.mock('../../common/lib/kibana');
const useKibanaMock = useKibana as jest.Mocked;
const onCaseCreated = jest.fn();
-describe('useCreateCaseModal', () => {
+// FLAKY: https://github.com/elastic/kibana/issues/174205
+describe.skip('useCreateCaseModal', () => {
let navigateToApp: jest.Mock;
beforeEach(() => {
From 95249489edf562d053e51975535f40dd3fd3467d Mon Sep 17 00:00:00 2001
From: Tiago Costa
Date: Tue, 12 Mar 2024 00:47:30 +0000
Subject: [PATCH 038/100] skip flaky suite (#176805)
---
.../cases/public/components/custom_fields/index.test.tsx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/x-pack/plugins/cases/public/components/custom_fields/index.test.tsx b/x-pack/plugins/cases/public/components/custom_fields/index.test.tsx
index 15a280716c3c..4da76d846dd9 100644
--- a/x-pack/plugins/cases/public/components/custom_fields/index.test.tsx
+++ b/x-pack/plugins/cases/public/components/custom_fields/index.test.tsx
@@ -17,7 +17,8 @@ import { MAX_CUSTOM_FIELDS_PER_CASE } from '../../../common/constants';
import { CustomFields } from '.';
import * as i18n from './translations';
-describe('CustomFields', () => {
+// FLAKY: https://github.com/elastic/kibana/issues/176805
+describe.skip('CustomFields', () => {
let appMockRender: AppMockRenderer;
const props = {
From dd41f9a0050459ab10ac6f47a21dfffa3b0ea9b5 Mon Sep 17 00:00:00 2001
From: Tiago Costa
Date: Tue, 12 Mar 2024 01:07:24 +0000
Subject: [PATCH 039/100] fix(NA): eslint errors on cypress test
---
.../e2e/explore/inspect/inspect_button.cy.ts | 98 ++++++++++---------
1 file changed, 51 insertions(+), 47 deletions(-)
diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts
index 4d0fbc7e2153..3deabd6afa16 100644
--- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts
+++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts
@@ -25,64 +25,68 @@ import { postDataView } from '../../../tasks/api_calls/common';
const DATA_VIEW = 'auditbeat-*';
// FLAKY: https://github.com/elastic/kibana/issues/178367
-describe.skip('Inspect Explore pages', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => {
- before(() => {
- // illegal_argument_exception: unknown setting [index.lifecycle.name]
- cy.task('esArchiverLoad', { archiveName: 'risk_users' });
- cy.task('esArchiverLoad', { archiveName: 'risk_hosts' });
+describe.skip(
+ 'Inspect Explore pages',
+ { tags: ['@ess', '@serverless', '@brokenInServerless'] },
+ () => {
+ before(() => {
+ // illegal_argument_exception: unknown setting [index.lifecycle.name]
+ cy.task('esArchiverLoad', { archiveName: 'risk_users' });
+ cy.task('esArchiverLoad', { archiveName: 'risk_hosts' });
- login();
- // Create and select data view
- postDataView(DATA_VIEW);
- });
+ login();
+ // Create and select data view
+ postDataView(DATA_VIEW);
+ });
- after(() => {
- cy.task('esArchiverUnload', 'risk_users');
- cy.task('esArchiverUnload', 'risk_hosts');
- });
+ after(() => {
+ cy.task('esArchiverUnload', 'risk_users');
+ cy.task('esArchiverUnload', 'risk_hosts');
+ });
- INSPECT_BUTTONS_IN_SECURITY.forEach(({ pageName, url, lensVisualizations, tables }) => {
- /**
- * Group all tests of a page into one "it" call to improve speed
- */
- it(`inspect ${pageName} page`, () => {
- login();
+ INSPECT_BUTTONS_IN_SECURITY.forEach(({ pageName, url, lensVisualizations, tables }) => {
+ /**
+ * Group all tests of a page into one "it" call to improve speed
+ */
+ it(`inspect ${pageName} page`, () => {
+ login();
- visitWithTimeRange(url, {
- visitOptions: {
- onLoad: () => {
- waitForWelcomePanelToBeLoaded();
- selectDataView(DATA_VIEW);
+ visitWithTimeRange(url, {
+ visitOptions: {
+ onLoad: () => {
+ waitForWelcomePanelToBeLoaded();
+ selectDataView(DATA_VIEW);
+ },
},
- },
- });
+ });
+
+ lensVisualizations.forEach((lens) => {
+ cy.log(`inspects the ${lens.title} visualization`);
+ openTab(lens.tab);
- lensVisualizations.forEach((lens) => {
- cy.log(`inspects the ${lens.title} visualization`);
- openTab(lens.tab);
+ openLensVisualizationsInspectModal(lens, () => {
+ cy.get(INSPECT_MODAL).should('be.visible');
+ cy.get(INSPECT_MODAL_INDEX_PATTERN).should(
+ 'contain.text',
+ lens.customIndexPattern ? lens.customIndexPattern : DATA_VIEW
+ );
+ });
+ });
+
+ tables.forEach((table) => {
+ cy.log(`inspects the ${table.title}`);
+ openTab(table.tab);
- openLensVisualizationsInspectModal(lens, () => {
+ openTableInspectModal(table);
cy.get(INSPECT_MODAL).should('be.visible');
cy.get(INSPECT_MODAL_INDEX_PATTERN).should(
'contain.text',
- lens.customIndexPattern ? lens.customIndexPattern : DATA_VIEW
+ table.customIndexPattern ? table.customIndexPattern : DATA_VIEW
);
- });
- });
- tables.forEach((table) => {
- cy.log(`inspects the ${table.title}`);
- openTab(table.tab);
-
- openTableInspectModal(table);
- cy.get(INSPECT_MODAL).should('be.visible');
- cy.get(INSPECT_MODAL_INDEX_PATTERN).should(
- 'contain.text',
- table.customIndexPattern ? table.customIndexPattern : DATA_VIEW
- );
-
- closesModal();
+ closesModal();
+ });
});
});
- });
-});
+ }
+);
From 87df7ab7d223c0fd8c70df1515e47a57c81f01bd Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Tue, 12 Mar 2024 01:27:10 -0400
Subject: [PATCH 040/100] [api-docs] 2024-03-12 Daily api_docs build (#178469)
Generated by
https://buildkite.com/elastic/kibana-api-docs-daily/builds/640
---
api_docs/actions.devdocs.json | 55 +
api_docs/actions.mdx | 4 +-
api_docs/advanced_settings.mdx | 2 +-
.../ai_assistant_management_observability.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/asset_manager.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_experiments.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.devdocs.json | 43 +-
api_docs/dashboard.mdx | 2 +-
api_docs/dashboard_enhanced.mdx | 2 +-
api_docs/data.mdx | 2 +-
api_docs/data_query.mdx | 2 +-
api_docs/data_search.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 | 4 +-
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/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/es_ui_shared.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.devdocs.json | 4 +-
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/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.devdocs.json | 14 -
api_docs/index_management.mdx | 4 +-
api_docs/infra.mdx | 2 +-
api_docs/ingest_pipelines.mdx | 2 +-
api_docs/inspector.mdx | 2 +-
api_docs/interactive_setup.mdx | 2 +-
api_docs/kbn_ace.mdx | 2 +-
api_docs/kbn_actions_types.mdx | 2 +-
api_docs/kbn_aiops_components.mdx | 2 +-
api_docs/kbn_aiops_utils.mdx | 2 +-
.../kbn_alerting_api_integration_helpers.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_ui_shared.mdx | 2 +-
api_docs/kbn_analytics.mdx | 2 +-
api_docs/kbn_analytics_client.devdocs.json | 12 -
api_docs/kbn_analytics_client.mdx | 2 +-
api_docs/kbn_analytics_collection_utils.mdx | 2 +-
..._analytics_shippers_elastic_v3_browser.mdx | 2 +-
...n_analytics_shippers_elastic_v3_common.mdx | 2 +-
...n_analytics_shippers_elastic_v3_server.mdx | 2 +-
api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +-
api_docs/kbn_apm_config_loader.mdx | 2 +-
api_docs/kbn_apm_synthtrace.mdx | 2 +-
api_docs/kbn_apm_synthtrace_client.mdx | 2 +-
api_docs/kbn_apm_utils.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_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_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 +-
...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 +-
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_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.devdocs.json | 40 +-
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 +-
...kbn_core_saved_objects_server.devdocs.json | 8 +-
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_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_settings_server.mdx | 2 +-
...kbn_core_user_settings_server_internal.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_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_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 +-
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_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_utils.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_guided_onboarding.mdx | 2 +-
api_docs/kbn_handlebars.mdx | 2 +-
api_docs/kbn_hapi_mocks.mdx | 2 +-
api_docs/kbn_health_gateway_server.mdx | 2 +-
api_docs/kbn_home_sample_data_card.mdx | 2 +-
api_docs/kbn_home_sample_data_tab.mdx | 2 +-
api_docs/kbn_i18n.mdx | 2 +-
api_docs/kbn_i18n_react.mdx | 2 +-
api_docs/kbn_import_resolver.mdx | 2 +-
api_docs/kbn_infra_forge.mdx | 2 +-
api_docs/kbn_interpreter.mdx | 2 +-
api_docs/kbn_io_ts_utils.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_kibana_manifest_schema.mdx | 2 +-
.../kbn_language_documentation_popover.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_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_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_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_trained_models_utils.mdx | 2 +-
api_docs/kbn_ml_ui_actions.mdx | 2 +-
api_docs/kbn_ml_url_state.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_observability_alert_details.mdx | 2 +-
.../kbn_observability_alerting_test_data.mdx | 2 +-
...ility_get_padded_alert_time_range_util.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_library.mdx | 2 +-
api_docs/kbn_presentation_publishing.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_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_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_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 +-
api_docs/kbn_rison.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_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_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 +-
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 +-
.../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_grouping.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 +-
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_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_std.mdx | 2 +-
api_docs/kbn_stdio_dev_helpers.mdx | 2 +-
api_docs/kbn_storybook.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_text_based_editor.mdx | 2 +-
api_docs/kbn_timerange.mdx | 2 +-
api_docs/kbn_tooling_log.mdx | 2 +-
api_docs/kbn_triggers_actions_ui_types.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_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_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.devdocs.json | 98 +-
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_explorer.mdx | 2 +-
api_docs/logs_shared.devdocs.json | 8 +-
api_docs/logs_shared.mdx | 2 +-
api_docs/management.mdx | 2 +-
api_docs/maps.devdocs.json | 99 +-
api_docs/maps.mdx | 7 +-
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.devdocs.json | 8 +-
api_docs/observability.mdx | 2 +-
.../observability_a_i_assistant.devdocs.json | 3477 +++++++++++++++--
api_docs/observability_a_i_assistant.mdx | 16 +-
...servability_a_i_assistant_app.devdocs.json | 55 +
api_docs/observability_a_i_assistant_app.mdx | 33 +
api_docs/observability_logs_explorer.mdx | 2 +-
api_docs/observability_onboarding.mdx | 2 +-
api_docs/observability_shared.mdx | 2 +-
api_docs/osquery.mdx | 2 +-
api_docs/painless_lab.mdx | 2 +-
api_docs/plugin_directory.mdx | 17 +-
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/security.mdx | 2 +-
api_docs/security_solution.devdocs.json | 39 +-
api_docs/security_solution.mdx | 4 +-
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/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/text_based_languages.mdx | 2 +-
api_docs/threat_intelligence.mdx | 2 +-
api_docs/timelines.mdx | 2 +-
api_docs/transform.mdx | 2 +-
api_docs/triggers_actions_ui.mdx | 2 +-
api_docs/ui_actions.mdx | 2 +-
api_docs/ui_actions_enhanced.mdx | 2 +-
api_docs/unified_doc_viewer.mdx | 2 +-
api_docs/unified_histogram.mdx | 2 +-
api_docs/unified_search.mdx | 2 +-
api_docs/unified_search_autocomplete.mdx | 2 +-
api_docs/uptime.mdx | 2 +-
api_docs/url_forwarding.mdx | 2 +-
api_docs/usage_collection.mdx | 2 +-
api_docs/ux.mdx | 2 +-
api_docs/vis_default_editor.mdx | 2 +-
api_docs/vis_type_gauge.mdx | 2 +-
api_docs/vis_type_heatmap.mdx | 2 +-
api_docs/vis_type_pie.mdx | 2 +-
api_docs/vis_type_table.mdx | 2 +-
api_docs/vis_type_timelion.mdx | 2 +-
api_docs/vis_type_timeseries.mdx | 2 +-
api_docs/vis_type_vega.mdx | 2 +-
api_docs/vis_type_vislib.mdx | 2 +-
api_docs/vis_type_xy.mdx | 2 +-
api_docs/visualizations.mdx | 2 +-
667 files changed, 4151 insertions(+), 1188 deletions(-)
create mode 100644 api_docs/observability_a_i_assistant_app.devdocs.json
create mode 100644 api_docs/observability_a_i_assistant_app.mdx
diff --git a/api_docs/actions.devdocs.json b/api_docs/actions.devdocs.json
index 4fd722c036e8..fa2885287bbc 100644
--- a/api_docs/actions.devdocs.json
+++ b/api_docs/actions.devdocs.json
@@ -2682,6 +2682,61 @@
"trackAdoption": false
}
]
+ },
+ {
+ "parentPluginId": "actions",
+ "id": "def-server.ActionType.getService",
+ "type": "Function",
+ "tags": [],
+ "label": "getService",
+ "description": [],
+ "signature": [
+ "((params: ",
+ {
+ "pluginId": "actions",
+ "scope": "server",
+ "docId": "kibActionsPluginApi",
+ "section": "def-server.ServiceParams",
+ "text": "ServiceParams"
+ },
+ ") => ",
+ {
+ "pluginId": "actions",
+ "scope": "server",
+ "docId": "kibActionsPluginApi",
+ "section": "def-server.SubActionConnector",
+ "text": "SubActionConnector"
+ },
+ ") | undefined"
+ ],
+ "path": "x-pack/plugins/actions/server/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "actions",
+ "id": "def-server.ActionType.getService.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "params",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "actions",
+ "scope": "server",
+ "docId": "kibActionsPluginApi",
+ "section": "def-server.ServiceParams",
+ "text": "ServiceParams"
+ },
+ ""
+ ],
+ "path": "x-pack/plugins/actions/server/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": []
}
],
"initialIsOpen": false
diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx
index 6c84218b3500..50ab303a2848 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions']
---
import actionsObj from './actions.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 279 | 0 | 273 | 31 |
+| 281 | 0 | 275 | 31 |
## Client
diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx
index 1369bff2ff25..d82a4a5358ee 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings']
---
import advancedSettingsObj from './advanced_settings.devdocs.json';
diff --git a/api_docs/ai_assistant_management_observability.mdx b/api_docs/ai_assistant_management_observability.mdx
index 5ba561f0ce7f..4a81bda1a832 100644
--- a/api_docs/ai_assistant_management_observability.mdx
+++ b/api_docs/ai_assistant_management_observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementObservability
title: "aiAssistantManagementObservability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the aiAssistantManagementObservability plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementObservability']
---
import aiAssistantManagementObservabilityObj from './ai_assistant_management_observability.devdocs.json';
diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx
index 768fae761989..df08b366096b 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-03-11
+date: 2024-03-12
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 97e7a2014401..80a171590d1a 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-03-11
+date: 2024-03-12
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 e04b3283ad3a..e6573ccf6ac5 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-03-11
+date: 2024-03-12
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 499fda091f6a..10ae0fb6b848 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-03-11
+date: 2024-03-12
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 1c8274e6ba15..c056627c2f80 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess']
---
import apmDataAccessObj from './apm_data_access.devdocs.json';
diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx
index 010077cb7d93..c9183f850cc8 100644
--- a/api_docs/asset_manager.mdx
+++ b/api_docs/asset_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager
title: "assetManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the assetManager plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager']
---
import assetManagerObj from './asset_manager.devdocs.json';
diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx
index c5e957b26ee6..01341f087ced 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-03-11
+date: 2024-03-12
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 2688588e9c01..3916f2b8b143 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-03-11
+date: 2024-03-12
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 1363a05a9480..24ebae8ee75a 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-03-11
+date: 2024-03-12
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 102a94ec712f..a5131360840a 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-03-11
+date: 2024-03-12
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 55bc7ac7e120..0735d4bcc575 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-03-11
+date: 2024-03-12
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 099637146ef8..f3de1bf56664 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-03-11
+date: 2024-03-12
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 47fffb64d6e4..22ad39518d58 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-03-11
+date: 2024-03-12
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 b69dc9bb26af..bc0f3d041c72 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend']
---
import cloudDefendObj from './cloud_defend.devdocs.json';
diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx
index adc0510f9eca..38f80c5ce3b7 100644
--- a/api_docs/cloud_experiments.mdx
+++ b/api_docs/cloud_experiments.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments
title: "cloudExperiments"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudExperiments plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments']
---
import cloudExperimentsObj from './cloud_experiments.devdocs.json';
diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx
index a2a4ffc570e9..d4c18ac67d4b 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-03-11
+date: 2024-03-12
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 fea8fd9c32e2..122b40461bfc 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-03-11
+date: 2024-03-12
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 381516bb5c97..e0487776b248 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-03-11
+date: 2024-03-12
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 afab8c6b6b6e..144462cace37 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-03-11
+date: 2024-03-12
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 4d7d25e37dc0..6fe29708eaea 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations']
---
import customIntegrationsObj from './custom_integrations.devdocs.json';
diff --git a/api_docs/dashboard.devdocs.json b/api_docs/dashboard.devdocs.json
index 361449f99a88..f82795fb1b29 100644
--- a/api_docs/dashboard.devdocs.json
+++ b/api_docs/dashboard.devdocs.json
@@ -608,7 +608,13 @@
"label": "AwaitingDashboardAPI",
"description": [],
"signature": [
- "DashboardContainer",
+ {
+ "pluginId": "dashboard",
+ "scope": "public",
+ "docId": "kibDashboardPluginApi",
+ "section": "def-public.DashboardAPI",
+ "text": "DashboardAPI"
+ },
" | null"
],
"path": "src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts",
@@ -669,7 +675,40 @@
"label": "DashboardAPI",
"description": [],
"signature": [
- "DashboardContainer"
+ "DashboardContainer",
+ " & Partial<",
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.HasType",
+ "text": "HasType"
+ },
+ "<\"dashboard\"> & ",
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.PublishesLocalUnifiedSearch",
+ "text": "PublishesLocalUnifiedSearch"
+ },
+ " & ",
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.PublishesPanelTitle",
+ "text": "PublishesPanelTitle"
+ },
+ " & ",
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.PublishesSavedObjectId",
+ "text": "PublishesSavedObjectId"
+ },
+ ">"
],
"path": "src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts",
"deprecated": false,
diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx
index 1ada88c7e3c8..d50b1d2db629 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-03-11
+date: 2024-03-12
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 81d2b0f15555..603b61d3cf3b 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-03-11
+date: 2024-03-12
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 0d86872147bb..0fb506238240 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data']
---
import dataObj from './data.devdocs.json';
diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx
index 3ca1cf631448..978a61c477aa 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-03-11
+date: 2024-03-12
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 879cc6a80711..5fa7cd0f30fd 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search']
---
import dataSearchObj from './data_search.devdocs.json';
diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx
index 57935a218882..e450ba6a4234 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-03-11
+date: 2024-03-12
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 310cac82f896..f8fb6cf19844 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-03-11
+date: 2024-03-12
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 2a26619383ae..f1f9a7494f5f 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-03-11
+date: 2024-03-12
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 f1edddf7d18f..a20b06603967 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-03-11
+date: 2024-03-12
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 51a460c8d7f4..820eb16563e4 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-03-11
+date: 2024-03-12
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 68d450f2a08e..def2ca3b863c 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-03-11
+date: 2024-03-12
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 9ab9bca5a744..8311a36e4ecc 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
@@ -22,7 +22,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | actions, ml, savedObjectsTagging, enterpriseSearch | - |
| | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, visualizations, aiops, ml, dataVisualizer, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - |
| | @kbn/core, savedObjects, embeddable, visualizations, canvas, graph, ml, @kbn/core-saved-objects-common, @kbn/core-saved-objects-server, actions, alerting, savedSearch, enterpriseSearch, securitySolution, taskManager, @kbn/core-saved-objects-server-internal, @kbn/core-saved-objects-api-server | - |
-| | @kbn/core-saved-objects-base-server-internal, @kbn/core-saved-objects-migration-server-internal, @kbn/core-saved-objects-server-internal, @kbn/core-ui-settings-server-internal, @kbn/core-usage-data-server-internal, taskManager, spaces, actions, @kbn/core-saved-objects-migration-server-mocks, share, dataViews, data, alerting, lens, cases, apmDataAccess, visualizations, ml, observability, savedSearch, canvas, fleet, cloudSecurityPosture, logsShared, graph, lists, maps, infra, securitySolution, apm, synthetics, uptime, dashboard, eventAnnotation, links, savedObjectsManagement, @kbn/core-test-helpers-so-type-serializer, @kbn/core-saved-objects-api-server-internal | - |
+| | @kbn/core-saved-objects-base-server-internal, @kbn/core-saved-objects-migration-server-internal, @kbn/core-saved-objects-server-internal, @kbn/core-ui-settings-server-internal, @kbn/core-usage-data-server-internal, spaces, taskManager, actions, @kbn/core-saved-objects-migration-server-mocks, share, dataViews, data, alerting, lens, cases, apmDataAccess, visualizations, ml, observability, savedSearch, canvas, fleet, cloudSecurityPosture, logsShared, graph, lists, maps, infra, securitySolution, apm, synthetics, uptime, dashboard, eventAnnotation, links, savedObjectsManagement, @kbn/core-test-helpers-so-type-serializer, @kbn/core-saved-objects-api-server-internal | - |
| | stackAlerts, alerting, securitySolution, inputControlVis | - |
| | graph, stackAlerts, inputControlVis, securitySolution, savedObjects | - |
| | dashboard, dataVisualizer, stackAlerts, expressionPartitionVis | - |
diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx
index 18dca14dfec9..48d98dffeec1 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx
index 0dbd06eb4ae3..1bfc5643f224 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx
index 141022bd25c4..2bb5e121325b 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-03-11
+date: 2024-03-12
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 ffc7d66bdf6f..24cc2d271232 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-03-11
+date: 2024-03-12
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 953172099ec9..2aba0640673b 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced']
---
import discoverEnhancedObj from './discover_enhanced.devdocs.json';
diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx
index 6a3d5c586698..7143b8465dcc 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-03-11
+date: 2024-03-12
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 c8e19dea0f9d..c0985d47d52b 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-03-11
+date: 2024-03-12
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 9cdf7f30d9bf..121d2d01e64d 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-03-11
+date: 2024-03-12
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 57d3a89ec52c..a14d26c8a6bc 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-03-11
+date: 2024-03-12
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 fe37cdb4407b..282503f4bac5 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-03-11
+date: 2024-03-12
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 caff4e864c17..129af3207db8 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch']
---
import enterpriseSearchObj from './enterprise_search.devdocs.json';
diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx
index 8e0b761798a0..e3cba54f8da1 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared']
---
import esUiSharedObj from './es_ui_shared.devdocs.json';
diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx
index 76cbfa9a93fa..dabc10a02ce2 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-03-11
+date: 2024-03-12
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 feaefca6a12f..380f2b088d83 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-03-11
+date: 2024-03-12
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 cb9ad6b6dfac..778ce102b418 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog']
---
import eventLogObj from './event_log.devdocs.json';
diff --git a/api_docs/exploratory_view.devdocs.json b/api_docs/exploratory_view.devdocs.json
index 7d1c278b1382..fecfc6b9a577 100644
--- a/api_docs/exploratory_view.devdocs.json
+++ b/api_docs/exploratory_view.devdocs.json
@@ -1341,8 +1341,8 @@
"pluginId": "observabilityAIAssistant",
"scope": "public",
"docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-public.ObservabilityAIAssistantPluginStart",
- "text": "ObservabilityAIAssistantPluginStart"
+ "section": "def-public.ObservabilityAIAssistantPublicStart",
+ "text": "ObservabilityAIAssistantPublicStart"
}
],
"path": "x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts",
diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx
index cefb133b56db..c8ff57599fb7 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-03-11
+date: 2024-03-12
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 a9972f46c975..49c98e88ea6f 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-03-11
+date: 2024-03-12
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 576eeb9401cf..e3e27d0a98a0 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-03-11
+date: 2024-03-12
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 7352f4c26735..6c757d5df9c4 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-03-11
+date: 2024-03-12
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 7ce1ee9e708c..be8fd8ca8b14 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-03-11
+date: 2024-03-12
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 a003ced7bacc..a43536282c0f 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-03-11
+date: 2024-03-12
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 236871d90577..a3d499f51486 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-03-11
+date: 2024-03-12
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 4da1f10a01bc..26c6f6ac4fd8 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-03-11
+date: 2024-03-12
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 3219a0f0aa48..0f538cfc4c22 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-03-11
+date: 2024-03-12
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 c39cb69f0555..30f523c2a534 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-03-11
+date: 2024-03-12
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 f8bd2a4a94fe..b61c4bf7a1ca 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-03-11
+date: 2024-03-12
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 87c45b4b4b6b..1593c84dfe06 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-03-11
+date: 2024-03-12
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 6dfc9907c412..8e738e4f254a 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-03-11
+date: 2024-03-12
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 54e7e03d88e8..b97e78bcca0c 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-03-11
+date: 2024-03-12
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 1a846cf5043d..1e182c0f7c17 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-03-11
+date: 2024-03-12
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 5e7eda58f65d..dcd179fe9cfe 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-03-11
+date: 2024-03-12
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 9333e63031f9..4444ebdd3685 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats']
---
import fieldFormatsObj from './field_formats.devdocs.json';
diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx
index 0361673614b4..10459f9487c3 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-03-11
+date: 2024-03-12
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 933033efc084..470000133e40 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-03-11
+date: 2024-03-12
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 1758a967639f..159c0692ee97 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-03-11
+date: 2024-03-12
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 64c8f30894da..ff80f71dc183 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-03-11
+date: 2024-03-12
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 62e2bdd24e54..6eed143c1e43 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-03-11
+date: 2024-03-12
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 29d859d93878..34b7bce0c231 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-03-11
+date: 2024-03-12
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 d1c327ea7e8a..43e6a66a89aa 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-03-11
+date: 2024-03-12
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 28e1aa000e12..8d83c575ec5a 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-03-11
+date: 2024-03-12
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 1a5074ccd79d..e5b3cc626d6e 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement']
---
import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json';
diff --git a/api_docs/index_management.devdocs.json b/api_docs/index_management.devdocs.json
index 17257de39362..73442591dbed 100644
--- a/api_docs/index_management.devdocs.json
+++ b/api_docs/index_management.devdocs.json
@@ -1152,20 +1152,6 @@
"deprecated": false,
"trackAdoption": false
},
- {
- "parentPluginId": "indexManagement",
- "id": "def-common.ComponentTemplateDeserialized.isDeprecated",
- "type": "CompoundType",
- "tags": [],
- "label": "isDeprecated",
- "description": [],
- "signature": [
- "boolean | undefined"
- ],
- "path": "x-pack/plugins/index_management/common/types/component_templates.ts",
- "deprecated": false,
- "trackAdoption": false
- },
{
"parentPluginId": "indexManagement",
"id": "def-common.ComponentTemplateDeserialized._kbnMeta",
diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx
index 0d7079807d0e..01afb4bbdfa5 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement']
---
import indexManagementObj from './index_management.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/platform-deployment-management](https://github.com/orgs/elasti
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 225 | 0 | 220 | 3 |
+| 224 | 0 | 219 | 3 |
## Client
diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx
index b928c477663a..0787da1761a9 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-03-11
+date: 2024-03-12
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 af4636c4cb84..8065d065b505 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-03-11
+date: 2024-03-12
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 e37a03ff4544..acc1057d55ad 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector']
---
import inspectorObj from './inspector.devdocs.json';
diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx
index 6e06f0f8bb18..4122ecabbf88 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup']
---
import interactiveSetupObj from './interactive_setup.devdocs.json';
diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx
index caf91e85bf1d..8aa4d1670d96 100644
--- a/api_docs/kbn_ace.mdx
+++ b/api_docs/kbn_ace.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace
title: "@kbn/ace"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ace plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace']
---
import kbnAceObj from './kbn_ace.devdocs.json';
diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx
index 0edaed5b5086..6a61d6d2a3ec 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types']
---
import kbnActionsTypesObj from './kbn_actions_types.devdocs.json';
diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx
index c600645472aa..39f7ba7cfe78 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components']
---
import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json';
diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx
index a57dda3371fa..6af44dc29117 100644
--- a/api_docs/kbn_aiops_utils.mdx
+++ b/api_docs/kbn_aiops_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils
title: "@kbn/aiops-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/aiops-utils plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils']
---
import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json';
diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx
index 24a4b4f2981d..1dcf15d4bad6 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers']
---
import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json';
diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx
index 6a7c987d0932..8294b47c43f7 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-03-11
+date: 2024-03-12
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 163852482993..fc736001325e 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-03-11
+date: 2024-03-12
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 f8a2567bcb87..29d2789659ca 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils']
---
import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json';
diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx
index 66ec9b67b79d..ad32ce4bc575 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-03-11
+date: 2024-03-12
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 19de89b592de..5ec6e2db6bb7 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics']
---
import kbnAnalyticsObj from './kbn_analytics.devdocs.json';
diff --git a/api_docs/kbn_analytics_client.devdocs.json b/api_docs/kbn_analytics_client.devdocs.json
index 68d5d3159f9f..7c98f0472f4e 100644
--- a/api_docs/kbn_analytics_client.devdocs.json
+++ b/api_docs/kbn_analytics_client.devdocs.json
@@ -894,10 +894,6 @@
"plugin": "apm",
"path": "x-pack/plugins/observability_solution/apm/public/services/telemetry/telemetry_client.ts"
},
- {
- "plugin": "observabilityAIAssistant",
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/mock.tsx"
- },
{
"plugin": "observabilityAIAssistant",
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.test.ts"
@@ -1082,14 +1078,6 @@
"plugin": "@kbn/core-analytics-server-mocks",
"path": "packages/core/analytics/core-analytics-server-mocks/src/analytics_service.mock.ts"
},
- {
- "plugin": "observabilityAIAssistant",
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.test.ts"
- },
- {
- "plugin": "observabilityAIAssistant",
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_mock_chat_service.ts"
- },
{
"plugin": "@kbn/core-analytics-browser-internal",
"path": "packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts"
diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx
index 3e7fa8254565..a14493e34548 100644
--- a/api_docs/kbn_analytics_client.mdx
+++ b/api_docs/kbn_analytics_client.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client
title: "@kbn/analytics-client"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-client plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client']
---
import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json';
diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx
index 3a14e8b91017..039e1bd9bdc9 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils']
---
import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
index 8850b2ed0c0e..a2c1e78921ef 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser
title: "@kbn/analytics-shippers-elastic-v3-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser']
---
import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
index 2aa5fcdb5220..61378d9836aa 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common
title: "@kbn/analytics-shippers-elastic-v3-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common']
---
import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
index dea6f211d557..243de8b578f0 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server
title: "@kbn/analytics-shippers-elastic-v3-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server']
---
import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx
index 183e326717cb..9c4486255ed3 100644
--- a/api_docs/kbn_analytics_shippers_fullstory.mdx
+++ b/api_docs/kbn_analytics_shippers_fullstory.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory
title: "@kbn/analytics-shippers-fullstory"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-fullstory plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory']
---
import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json';
diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx
index 21015ce081c8..85f41c7307a7 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader']
---
import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json';
diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx
index 6d56005ff387..95924e806f3a 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-03-11
+date: 2024-03-12
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 f0ca6c7d415a..5dfcf3b44a54 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client']
---
import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json';
diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx
index 0526ca6930a6..4bbe204f85ef 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils']
---
import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json';
diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx
index 144a1a6d338d..2cb880aef3b0 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-03-11
+date: 2024-03-12
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 b72879c2877f..f777eee680fd 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-03-11
+date: 2024-03-12
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 4024eb717bf7..a152b6b8bc17 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-03-11
+date: 2024-03-12
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 15f072839edb..a93484e2c118 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-03-11
+date: 2024-03-12
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 62d3eb36add2..97a2b5dd7282 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components']
---
import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json';
diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx
index d1211db762e0..b7fd850f803a 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-03-11
+date: 2024-03-12
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 43b146f18bad..7efddef3245e 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-03-11
+date: 2024-03-12
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 2ce84a19feb0..3522bde5a61d 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-03-11
+date: 2024-03-12
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 4d99633ed8e4..a43c7bdc2159 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-03-11
+date: 2024-03-12
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 ba29313e6765..63918cc1cc7e 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-03-11
+date: 2024-03-12
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 4b9b949e6da0..e3fa4d02cee6 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-03-11
+date: 2024-03-12
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 7348a45d5c7b..2edd5f638c6f 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode']
---
import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json';
diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx
index bad5e15f4cc0..b78979a48eab 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-03-11
+date: 2024-03-12
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 838538ce2791..b533ffb42406 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-03-11
+date: 2024-03-12
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 6891dd2af98f..7e177e12251f 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-03-11
+date: 2024-03-12
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 0362756c0645..94215ae6a0a8 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-03-11
+date: 2024-03-12
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 16a321a5eecb..6d4d43072ec5 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-03-11
+date: 2024-03-12
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 9f8bea94e5dc..770818546f44 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-03-11
+date: 2024-03-12
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 0c08802d3e75..a903b8d17511 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-03-11
+date: 2024-03-12
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 b099b1c7c190..b04396137ac5 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor']
---
import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json';
diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx
index 6f141b46c407..39d0a3d98d31 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-03-11
+date: 2024-03-12
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 7c3520bc22c4..0c5c47f49059 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-03-11
+date: 2024-03-12
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 378a7638d16a..a7700c5e0640 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-03-11
+date: 2024-03-12
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 991c0cb876ed..3b96a2abad5f 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table']
---
import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json';
diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx
index 8dcfe3746a64..634a6fc5934d 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-03-11
+date: 2024-03-12
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 3cbcf73cba2b..fb6030ab29cf 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-03-11
+date: 2024-03-12
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 58b656c99b7a..2d06becb8a78 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-03-11
+date: 2024-03-12
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 b6556b1143e5..e5b1261e6452 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-03-11
+date: 2024-03-12
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 530f3ab35921..b4319bd965b8 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-03-11
+date: 2024-03-12
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 7d3fa9417d7b..9d2ff2808cef 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-03-11
+date: 2024-03-12
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 481d56f376ac..106cd67c51a2 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-03-11
+date: 2024-03-12
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 4553e62b57d0..697d3d32a73c 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-03-11
+date: 2024-03-12
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 214921c06010..7388be985876 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-03-11
+date: 2024-03-12
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 d50056f1666e..838b67b579f9 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-03-11
+date: 2024-03-12
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 99c37469597e..ab02a2596e58 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-03-11
+date: 2024-03-12
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 b565b7424bf1..98ccab824aaa 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-03-11
+date: 2024-03-12
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 d4d5adcfc7f8..0e7359f7e738 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-03-11
+date: 2024-03-12
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 9d821d4c5322..14130e723f14 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-03-11
+date: 2024-03-12
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 497ba8cd2714..92ca4dcbd32e 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-03-11
+date: 2024-03-12
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 4a807d537475..0774b66a9d38 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-03-11
+date: 2024-03-12
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 8effbf2622aa..7f60837c2ca0 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-03-11
+date: 2024-03-12
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 c9f9d0cbe7fd..90a4d5fdf430 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-03-11
+date: 2024-03-12
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 93013acb0b7b..d7790e98aa1e 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-03-11
+date: 2024-03-12
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 73578f22a0da..00b964f2f182 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-03-11
+date: 2024-03-12
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 f6d0f0055337..53ca787cc8cc 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-03-11
+date: 2024-03-12
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 8f7918ae3a88..c4b971280b7c 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-03-11
+date: 2024-03-12
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 9a70acdfc6aa..8cf6c203ecbf 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-03-11
+date: 2024-03-12
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 e79fc2bcb31a..b78117e98574 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-03-11
+date: 2024-03-12
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 1ed9cd4142af..07e643c2db2b 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-03-11
+date: 2024-03-12
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 ded50dd06822..9df71ae50f85 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-03-11
+date: 2024-03-12
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 e3859d644ff3..e7bd0c338ee5 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-03-11
+date: 2024-03-12
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 a2806d664d3a..40f44c691b7c 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-03-11
+date: 2024-03-12
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 f5643ba047f5..5d131a079a01 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-03-11
+date: 2024-03-12
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 200ce37bbb9f..4adbd2c483e8 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-03-11
+date: 2024-03-12
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 6e8348e401b5..ec390bc46205 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-03-11
+date: 2024-03-12
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 2ef04f5cfa8a..fbcc1baf5e1e 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-03-11
+date: 2024-03-12
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 a1b65ec2afcb..716d0dbbf772 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-03-11
+date: 2024-03-12
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 f39ede03db41..084c38412f96 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-03-11
+date: 2024-03-12
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 ed56ea28337b..eb3f4ff467e8 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-03-11
+date: 2024-03-12
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 88aa2efa567e..2851408a64b2 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-03-11
+date: 2024-03-12
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 51efba5093ba..9e3b302dc5ad 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-03-11
+date: 2024-03-12
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 76dc6da3955e..0e444669b028 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-03-11
+date: 2024-03-12
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 0f3b6337b1a3..40426138586d 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-03-11
+date: 2024-03-12
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 725614f160a9..6813c21e97f2 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-03-11
+date: 2024-03-12
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 2eb3abdce8d9..a8a376b5e2f1 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-03-11
+date: 2024-03-12
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 9b864cf0d84b..5ca19b76b724 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-03-11
+date: 2024-03-12
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 3614096ed5c3..e5c77c7961f9 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-03-11
+date: 2024-03-12
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 d63e5fe32ac1..b4b1d655cd5f 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-03-11
+date: 2024-03-12
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 6817fa236ac9..a0c933d446a1 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-03-11
+date: 2024-03-12
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 771760d17c37..c1d8a1e8e3be 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-03-11
+date: 2024-03-12
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 a0c4bf948966..bf1ed82aba78 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-03-11
+date: 2024-03-12
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 275bbcebbd68..fb0780fd6cb1 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-03-11
+date: 2024-03-12
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 348816a19392..135106c4a05e 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-03-11
+date: 2024-03-12
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 b07969f88cae..f9cef70a0753 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-03-11
+date: 2024-03-12
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 87ad6152648e..1cca6a169d28 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-03-11
+date: 2024-03-12
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 243b62f31b76..724f2e169d2d 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-03-11
+date: 2024-03-12
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 9e2b83e4b9b4..445019456c80 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-03-11
+date: 2024-03-12
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 79d197ecca0d..77474599a634 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-03-11
+date: 2024-03-12
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 b0a6ffe0c7f6..3fdb7bbcaf62 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-03-11
+date: 2024-03-12
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 f3aecaa58fba..6ca053f3d6d4 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-03-11
+date: 2024-03-12
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 36fbbb1b5ab3..736b1b2f3056 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-03-11
+date: 2024-03-12
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 2906ca14bbca..8aa6dc537847 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-03-11
+date: 2024-03-12
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 adfd1cc54442..031bdae299a7 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks']
---
import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx
index ada1c429f93f..4ddfbc6d41d2 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-03-11
+date: 2024-03-12
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 11caaad85873..9f129610419d 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-03-11
+date: 2024-03-12
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 38d8d0400ca4..c135b83c67ee 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-03-11
+date: 2024-03-12
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 2a034b8fa8e0..cf7f23828810 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-03-11
+date: 2024-03-12
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 c705649d421e..77e0cf36d5e1 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-03-11
+date: 2024-03-12
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 83d27f8a936f..046090a3cecf 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-03-11
+date: 2024-03-12
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 6dfa4b4bdab3..24007e6172ff 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-03-11
+date: 2024-03-12
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 87f781fe4276..8c49ff601d66 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-03-11
+date: 2024-03-12
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 2ea401636c55..a6e249fd30ed 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-03-11
+date: 2024-03-12
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 dbd05efe624b..a45d852ad991 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-03-11
+date: 2024-03-12
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 e18e45f0981f..2a680f2d8792 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks']
---
import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json
index 51589224da08..c0e574bab89e 100644
--- a/api_docs/kbn_core_http_server.devdocs.json
+++ b/api_docs/kbn_core_http_server.devdocs.json
@@ -3348,22 +3348,6 @@
"plugin": "@kbn/core-apps-server-internal",
"path": "packages/core/apps/core-apps-server-internal/src/core_app.ts"
},
- {
- "plugin": "usageCollection",
- "path": "src/plugins/usage_collection/server/routes/stats/stats.ts"
- },
- {
- "plugin": "taskManager",
- "path": "x-pack/plugins/task_manager/server/routes/health.ts"
- },
- {
- "plugin": "taskManager",
- "path": "x-pack/plugins/task_manager/server/routes/background_task_utilization.ts"
- },
- {
- "plugin": "taskManager",
- "path": "x-pack/plugins/task_manager/server/routes/metrics.ts"
- },
{
"plugin": "licensing",
"path": "x-pack/plugins/licensing/server/routes/info.ts"
@@ -3376,6 +3360,10 @@
"plugin": "features",
"path": "x-pack/plugins/features/server/routes/index.ts"
},
+ {
+ "plugin": "usageCollection",
+ "path": "src/plugins/usage_collection/server/routes/stats/stats.ts"
+ },
{
"plugin": "customIntegrations",
"path": "src/plugins/custom_integrations/server/routes/define_routes.ts"
@@ -3404,6 +3392,18 @@
"plugin": "spaces",
"path": "x-pack/plugins/spaces/server/routes/api/internal/get_active_space.ts"
},
+ {
+ "plugin": "taskManager",
+ "path": "x-pack/plugins/task_manager/server/routes/health.ts"
+ },
+ {
+ "plugin": "taskManager",
+ "path": "x-pack/plugins/task_manager/server/routes/background_task_utilization.ts"
+ },
+ {
+ "plugin": "taskManager",
+ "path": "x-pack/plugins/task_manager/server/routes/metrics.ts"
+ },
{
"plugin": "security",
"path": "x-pack/plugins/security/server/routes/api_keys/enabled.ts"
@@ -5910,10 +5910,6 @@
"plugin": "@kbn/core-capabilities-server-internal",
"path": "packages/core/capabilities/core-capabilities-server-internal/src/routes/resolve_capabilities.ts"
},
- {
- "plugin": "usageCollection",
- "path": "src/plugins/usage_collection/server/routes/ui_counters.ts"
- },
{
"plugin": "licensing",
"path": "x-pack/plugins/licensing/server/routes/internal/notify_feature_usage.ts"
@@ -5922,6 +5918,10 @@
"plugin": "licensing",
"path": "x-pack/plugins/licensing/server/routes/internal/register_feature.ts"
},
+ {
+ "plugin": "usageCollection",
+ "path": "src/plugins/usage_collection/server/routes/ui_counters.ts"
+ },
{
"plugin": "home",
"path": "src/plugins/home/server/services/sample_data/routes/install.ts"
diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx
index 12ad57b21e2e..46fde779de48 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-03-11
+date: 2024-03-12
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 327b5c15e913..6427afaa8869 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-03-11
+date: 2024-03-12
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 291987fdfdfe..bad8ec754e6d 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-03-11
+date: 2024-03-12
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 c80a0fb5312b..c145e062b3d9 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-03-11
+date: 2024-03-12
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 f7816eae72fb..c7349b4b70c7 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-03-11
+date: 2024-03-12
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 1a8a7ba6a3e7..c2fe772b96d8 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-03-11
+date: 2024-03-12
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 324911f6f6b5..ef8022a6e0e2 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-03-11
+date: 2024-03-12
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 a33e50b8d0f9..8ce6c42723d6 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-03-11
+date: 2024-03-12
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 dccf5d439d8d..5c26dbbb65f9 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-03-11
+date: 2024-03-12
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 3bc18ba2b11c..ac2507dce32a 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-03-11
+date: 2024-03-12
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 261cfcac6818..346606612b82 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-03-11
+date: 2024-03-12
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 f7b6b3feac7f..72e4019767ca 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-03-11
+date: 2024-03-12
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 5fee18cb6105..215a22e94775 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-03-11
+date: 2024-03-12
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 f3118d41fd10..33dd8e01d03d 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-03-11
+date: 2024-03-12
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 7f101ad37043..4dc8c48a42dc 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-03-11
+date: 2024-03-12
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 3fb72b2dadec..b9e45acfc1ce 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-03-11
+date: 2024-03-12
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 bda27a775848..98b5afb781fd 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-03-11
+date: 2024-03-12
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 0170705f6a21..b3e10411d682 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-03-11
+date: 2024-03-12
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 8179a10960f9..f8ac471b15b2 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-03-11
+date: 2024-03-12
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 98c8b412335e..5fe5ecc52075 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-03-11
+date: 2024-03-12
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 2a8245ef27dc..9f7463ad04d3 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-03-11
+date: 2024-03-12
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 03d888abde3b..aa35a4224ca1 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-03-11
+date: 2024-03-12
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 aa0c3ccce530..c581ea31df1b 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-03-11
+date: 2024-03-12
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 0725e31e8ae5..9f9935ad0b24 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-03-11
+date: 2024-03-12
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 fe4603463d40..3be3530a73d1 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-03-11
+date: 2024-03-12
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 fbf5effc8651..494253547522 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-03-11
+date: 2024-03-12
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 775e5a37cfe1..544fba7f7b6b 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-03-11
+date: 2024-03-12
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 80437c9305a7..6eea4b4be9b7 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-03-11
+date: 2024-03-12
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 d0d83e7c5290..bd96bcde4229 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-03-11
+date: 2024-03-12
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 d1634371cd8c..fc73c820bf76 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-03-11
+date: 2024-03-12
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 dba44076ad04..eb9e6930ee6e 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-03-11
+date: 2024-03-12
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 691adfcb5082..682d40f17f84 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-03-11
+date: 2024-03-12
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 7eb05f5153fd..4ef27122205a 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-03-11
+date: 2024-03-12
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 44bdb769e10d..b95fab994dc2 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-03-11
+date: 2024-03-12
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 a016d48cdc9a..fb19e264a1a9 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-03-11
+date: 2024-03-12
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 66049da9c178..7c3b8f5fe7ab 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-03-11
+date: 2024-03-12
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 37a08e9f0759..8b939fe68989 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-03-11
+date: 2024-03-12
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 a9edc72206bf..2a0557a70e67 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-03-11
+date: 2024-03-12
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 b3652022813d..2d26d75a051b 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-03-11
+date: 2024-03-12
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 2d008c1d7f5a..ccdabd805e20 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-03-11
+date: 2024-03-12
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 514ec1695363..9ef238e1cb2d 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-03-11
+date: 2024-03-12
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 04382689ce36..6b85f0754ffe 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-03-11
+date: 2024-03-12
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 36464903c7ec..32ba623caf33 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-03-11
+date: 2024-03-12
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 cbeaa7644531..be1387b3b2a4 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-03-11
+date: 2024-03-12
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 dbb6966ab532..afe07bab74b0 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-03-11
+date: 2024-03-12
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 0e488f1a2352..41c543e66855 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-03-11
+date: 2024-03-12
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 d2d3a9a20dd7..4ca8ac26734c 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-03-11
+date: 2024-03-12
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 f48b407b212b..f5c2c90f4529 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-03-11
+date: 2024-03-12
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 d0a7cd7cde34..7d00fe71e3bf 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-03-11
+date: 2024-03-12
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 55eec9f9f344..09d9bf2162b6 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-03-11
+date: 2024-03-12
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 40e95f023d5d..23a3cf7ab782 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-03-11
+date: 2024-03-12
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 4237d858e2ba..1a6096e003ef 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-03-11
+date: 2024-03-12
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 0b70f8a45d73..a66134d833d7 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-03-11
+date: 2024-03-12
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 71db97940c99..4c6efa985c42 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-03-11
+date: 2024-03-12
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 5e6ec7a5129f..d0b80c8a3100 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-03-11
+date: 2024-03-12
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 81dd957a609f..5b3818d73ca9 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-03-11
+date: 2024-03-12
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 55a7fe754dfd..dfadaf9046d4 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-03-11
+date: 2024-03-12
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 fc314207c592..5195ce952e21 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-03-11
+date: 2024-03-12
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 c03b9766b39d..5aed78b6d851 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-03-11
+date: 2024-03-12
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 999f05a6310b..0b3cb5ecd1a8 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-03-11
+date: 2024-03-12
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.devdocs.json b/api_docs/kbn_core_saved_objects_server.devdocs.json
index c4635d0fad2e..709ab639e063 100644
--- a/api_docs/kbn_core_saved_objects_server.devdocs.json
+++ b/api_docs/kbn_core_saved_objects_server.devdocs.json
@@ -10493,10 +10493,6 @@
"plugin": "@kbn/core-usage-data-server-internal",
"path": "packages/core/usage-data/core-usage-data-server-internal/src/saved_objects/core_usage_stats.ts"
},
- {
- "plugin": "taskManager",
- "path": "x-pack/plugins/task_manager/server/saved_objects/index.ts"
- },
{
"plugin": "spaces",
"path": "x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts"
@@ -10505,6 +10501,10 @@
"plugin": "spaces",
"path": "x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts"
},
+ {
+ "plugin": "taskManager",
+ "path": "x-pack/plugins/task_manager/server/saved_objects/index.ts"
+ },
{
"plugin": "actions",
"path": "x-pack/plugins/actions/server/saved_objects/index.ts"
diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx
index 283338f8a35f..63735026e811 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-03-11
+date: 2024-03-12
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 6994545f3df2..2da0180ca7ee 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-03-11
+date: 2024-03-12
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 03281498f49d..b85acbb06372 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-03-11
+date: 2024-03-12
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 e0a3fd4e11e2..6716b1825f9f 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server']
---
import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json';
diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx
index 769ce12fcaf2..d34bb9a6c751 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-03-11
+date: 2024-03-12
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 e0235ccf219f..641251da53a5 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-03-11
+date: 2024-03-12
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 803bf7204b63..ee72a7062d18 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-03-11
+date: 2024-03-12
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 5bb602ae1f19..0ac76c717979 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-03-11
+date: 2024-03-12
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 31dab833dbd9..c98adbba18c0 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-03-11
+date: 2024-03-12
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 7440b9dc15e0..fc2af17bfe7e 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-03-11
+date: 2024-03-12
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 e815c9c1c1ab..0cabe0c4ba0a 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-03-11
+date: 2024-03-12
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 671c2f8632b1..511860d4a36d 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-03-11
+date: 2024-03-12
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 61bba23a8e23..82d92b23eb9a 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-03-11
+date: 2024-03-12
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 041965626cc2..ee3d049b0ac5 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-03-11
+date: 2024-03-12
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 da6ef4c87ac0..0efaa0419e3d 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-03-11
+date: 2024-03-12
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 63aeaf61c5a2..e809681084d8 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-03-11
+date: 2024-03-12
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 3099e1e2eaf8..3974b299cb4b 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-03-11
+date: 2024-03-12
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 51501026ba9e..93be19728835 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-03-11
+date: 2024-03-12
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 143043ac3439..72921fcf3ee7 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-03-11
+date: 2024-03-12
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 181ce3f7f5e3..38793dd77aa1 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-03-11
+date: 2024-03-12
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 4558e40ea300..f5bc6714877e 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-03-11
+date: 2024-03-12
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 3eeb315dbc3c..87a7bbac6df9 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-03-11
+date: 2024-03-12
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 fc3dca546094..9fabd1fce3c0 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-03-11
+date: 2024-03-12
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 7f2a09a5d570..ceb8064dbf74 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-03-11
+date: 2024-03-12
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 08f07062920b..e16fd165fc59 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-03-11
+date: 2024-03-12
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 9851bc40bc84..876bb8b8ff40 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-03-11
+date: 2024-03-12
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 a110f573b6b4..7312feb7aba5 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks']
---
import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx
index 06668c434cab..e2ac9ac4294c 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server']
---
import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx
index ad9cf36c0b89..9ebd126bd104 100644
--- a/api_docs/kbn_core_user_settings_server_internal.mdx
+++ b/api_docs/kbn_core_user_settings_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal
title: "@kbn/core-user-settings-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server-internal plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal']
---
import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx
index cea6ba5a5d46..0c860e0ef7cf 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-03-11
+date: 2024-03-12
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 5870ee269840..7a9b560c0a3d 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-03-11
+date: 2024-03-12
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 7772bca586b5..9f691908667c 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-03-11
+date: 2024-03-12
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 1f8c2956c01b..366a61da70c2 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-03-11
+date: 2024-03-12
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 951a82711327..7f617efac18a 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-03-11
+date: 2024-03-12
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 ee79fd062c33..59e0e1023620 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-03-11
+date: 2024-03-12
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 3ecf02106d5a..f3927a4a4e4d 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-03-11
+date: 2024-03-12
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 b106c1347c1d..25a617c21ba2 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-03-11
+date: 2024-03-12
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 54b655ad6824..5fd91692650d 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-03-11
+date: 2024-03-12
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 41c4225f7110..d2029d367426 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-03-11
+date: 2024-03-12
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 a72830d79892..29cf8cf5ae6e 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-03-11
+date: 2024-03-12
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 bc1440ca6ce1..4b6fc1df8953 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-03-11
+date: 2024-03-12
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 75c1d3c30eb2..a57f1565950a 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools']
---
import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json';
diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx
index a978f5ae26e0..8d7a8cfe5d99 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-03-11
+date: 2024-03-12
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 0ccc2d4f7c20..857e199e8692 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-03-11
+date: 2024-03-12
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 89ae96533942..e3b6677fa322 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-03-11
+date: 2024-03-12
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 36f58b074f28..d49aae4d366a 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search']
---
import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json';
diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx
index 42e82db2fca4..0eaac977d7ba 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-03-11
+date: 2024-03-12
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 6532bede1f24..10bfe0145db5 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-03-11
+date: 2024-03-12
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 115f30c2c69b..2e87a77a64cb 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-03-11
+date: 2024-03-12
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 8705bc18efd0..66db3b2bbd5a 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-03-11
+date: 2024-03-12
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 76accc6f195b..230508632f02 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-03-11
+date: 2024-03-12
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 8b79b98a1d33..a1804277f166 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-03-11
+date: 2024-03-12
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 7af9c885c369..6a53ec5d3d7e 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-03-11
+date: 2024-03-12
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 e7dd04b03af8..5852c5805422 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils']
---
import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json';
diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx
index 12c128d57c10..3f30bac9992f 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-03-11
+date: 2024-03-12
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 221e5df40cf3..bfd0c508ee8f 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-03-11
+date: 2024-03-12
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 981799bab15c..d4045b5ff04a 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-03-11
+date: 2024-03-12
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 942bac744d8b..f7c51ac65260 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-03-11
+date: 2024-03-12
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 58cb658fdc2c..527ab5660d9f 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-03-11
+date: 2024-03-12
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 2d9a2badfc58..3beccb738af6 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-03-11
+date: 2024-03-12
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 04841b5cfd27..d19112c40bcb 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-03-11
+date: 2024-03-12
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 a87ed61d5106..14dc4836941d 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-03-11
+date: 2024-03-12
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 a878a53a5c4c..6ba519c086ca 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common']
---
import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json';
diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx
index 6ea62ec5e53d..d6574cfb7d88 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-03-11
+date: 2024-03-12
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 73cbd7959e6b..b3d6a99db525 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-03-11
+date: 2024-03-12
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 e870edbb0d3c..14aef84bf2db 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-03-11
+date: 2024-03-12
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 a6d44ced6331..80ee8609055e 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-03-11
+date: 2024-03-12
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 95b01bf154f5..3c165b72aa09 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-03-11
+date: 2024-03-12
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 f11d61d3a639..2a7d3808c96b 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports']
---
import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json';
diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx
index d0a1ee62f910..5543ecbff496 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils']
---
import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json';
diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx
index 5d8278bf935e..f98fae084e44 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-03-11
+date: 2024-03-12
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 119a526c30ae..651ede034808 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-03-11
+date: 2024-03-12
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 49ef9f750869..06ee543ac6b9 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-03-11
+date: 2024-03-12
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 cd71d63d172c..e966a867b62f 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-03-11
+date: 2024-03-12
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 1c4c2cd0c8c7..1b7795cae30d 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-03-11
+date: 2024-03-12
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 afa769c6e5c3..23ea20f4a8a8 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-03-11
+date: 2024-03-12
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 e388c360f2bf..9e2d38519551 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-03-11
+date: 2024-03-12
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 1675d1cddaeb..42faca62928f 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-03-11
+date: 2024-03-12
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 011dd7ab16a4..99c951ac2db7 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-03-11
+date: 2024-03-12
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 3fb9af74b7c7..20bd0efb7040 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-03-11
+date: 2024-03-12
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 f851074e1130..c2e605ef0db4 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-03-11
+date: 2024-03-12
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 7214aab235f4..c0d02da0530f 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv']
---
import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json';
diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx
index 10e55cd06f2d..7911f3ac227a 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-03-11
+date: 2024-03-12
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 a3db3c1de192..85eea8fa1c6e 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-03-11
+date: 2024-03-12
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 6aa12b88237c..8803f22a5c9f 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-03-11
+date: 2024-03-12
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 582bba4af3a1..b1f3cdf7bdb2 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-03-11
+date: 2024-03-12
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 1ee3c81e2d66..fd7ac15b34fa 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-03-11
+date: 2024-03-12
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 25ecab7c64d1..145d177d6454 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-03-11
+date: 2024-03-12
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 72cf9a3773f2..5d1be6e12304 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-03-11
+date: 2024-03-12
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 e45a4fc98c35..fddbfff93640 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-03-11
+date: 2024-03-12
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 e3f7b35a155c..3a2ae53f0fee 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver']
---
import kbnImportResolverObj from './kbn_import_resolver.devdocs.json';
diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx
index 0cecb0a4ba5c..24846104e1a9 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-03-11
+date: 2024-03-12
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 4941f2a1ab15..5bc9cd692153 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter']
---
import kbnInterpreterObj from './kbn_interpreter.devdocs.json';
diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx
index cbb0aff006a7..906f8a7afd2d 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils']
---
import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json';
diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx
index 804d14c91ff2..095a3d6134ab 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-03-11
+date: 2024-03-12
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 029c5ed97d99..27bb69e9e9ac 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-03-11
+date: 2024-03-12
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 ab3fd2f23aa3..02a613bef934 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast']
---
import kbnJsonAstObj from './kbn_json_ast.devdocs.json';
diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx
index 11a4dd5914b2..4d61043d16e4 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema']
---
import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json';
diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx
index bf56a7a29e40..16a77b04e337 100644
--- a/api_docs/kbn_language_documentation_popover.mdx
+++ b/api_docs/kbn_language_documentation_popover.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover
title: "@kbn/language-documentation-popover"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/language-documentation-popover plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover']
---
import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json';
diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx
index b64d28563bf8..a6f399d3f89c 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-03-11
+date: 2024-03-12
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 89cd7738a9c5..948385e9c797 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-03-11
+date: 2024-03-12
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 01540d29df7f..a9d456b12aad 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-03-11
+date: 2024-03-12
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 2ce433c5fa27..d998e0058e64 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-03-11
+date: 2024-03-12
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 eda7f5479755..01549a2df1d2 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-03-11
+date: 2024-03-12
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 db01da0c3d33..95b8a6d038dd 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-03-11
+date: 2024-03-12
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 aa6b118d6564..f2893fe3e341 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-03-11
+date: 2024-03-12
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 ac8bc393eeee..975f4e9d51e5 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-03-11
+date: 2024-03-12
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 f424312a0eec..bd528e4fe960 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-03-11
+date: 2024-03-12
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 a0899a5dbf5a..0a0a7b21dac6 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-03-11
+date: 2024-03-12
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 3207a2109c77..a3832d56be25 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-03-11
+date: 2024-03-12
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 e703c0cc8bbb..115ff18aa347 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-03-11
+date: 2024-03-12
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 3b414721022d..635d84c86cc1 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-03-11
+date: 2024-03-12
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 7a0c67f2d8d7..0a7b7af951a4 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-03-11
+date: 2024-03-12
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 ac1a13c4ed07..c229663e3b5c 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-03-11
+date: 2024-03-12
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 6a5d93407de7..6bea20894118 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-03-11
+date: 2024-03-12
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 8d858821e203..8959e8b1271c 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-03-11
+date: 2024-03-12
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 b9cb128b7812..eb0f092a7fc2 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config']
---
import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json';
diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx
index c6d0cec910e3..3d785a62b396 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-03-11
+date: 2024-03-12
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 c8c4b16cc138..2c2801363cef 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-03-11
+date: 2024-03-12
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 a8d4e4fc4f8d..78f14b28ba72 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-03-11
+date: 2024-03-12
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 013df9d204e9..348b2c8a0e9e 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-03-11
+date: 2024-03-12
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 4a0534d1db95..10f3a43479f6 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-03-11
+date: 2024-03-12
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 4b1d8642a5b5..da9308773fa9 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-03-11
+date: 2024-03-12
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 abd7c0e42ab3..7111fda0f7e1 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-03-11
+date: 2024-03-12
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 baeb2f8ea1bd..400d8c68bd6c 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-03-11
+date: 2024-03-12
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 56efb731bc9b..8ec1f6100c26 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-03-11
+date: 2024-03-12
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 8e0483b25eee..ccbb614d0f50 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-03-11
+date: 2024-03-12
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 2255a68e84e1..c87657990d50 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-03-11
+date: 2024-03-12
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 2eefa9138498..800d7ffad740 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils']
---
import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx
index 0191e12ab998..75b4c9aba752 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-03-11
+date: 2024-03-12
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 ce95b13f839d..2e762554a958 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-03-11
+date: 2024-03-12
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 f5d7e7031882..1ce61cfea8f3 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-03-11
+date: 2024-03-12
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 8f2200cd4003..9aebed24cbac 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-03-11
+date: 2024-03-12
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 bcd3868837c8..43ab49129b43 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-03-11
+date: 2024-03-12
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 f3063f849182..e3ba0b980826 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-03-11
+date: 2024-03-12
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 531f0a8bbe70..8551a30d8c36 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils']
---
import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx
index 34920c6604d4..bd2c9e463924 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-03-11
+date: 2024-03-12
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 6d601bd97035..7180774bc953 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-03-11
+date: 2024-03-12
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 13a83ec40703..3b7afaa01d35 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-03-11
+date: 2024-03-12
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 78d049328810..1c0723a76280 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-03-11
+date: 2024-03-12
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 b143da4542ec..4b1b951a1a9c 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash']
---
import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json';
diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx
index f5b8f4b4ecc2..bb0af2087a79 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-03-11
+date: 2024-03-12
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 91ca07897e39..9955cf5f4ec4 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-03-11
+date: 2024-03-12
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 2b67f8714dfe..cf2e2c1f8788 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state']
---
import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json';
diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx
index 807cf331ffd8..21c167e1167a 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-03-11
+date: 2024-03-12
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 6e593ea67fe0..caa25430f591 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-03-11
+date: 2024-03-12
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 74438269e6e6..37af52f693a6 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning']
---
import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json';
diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx
index cb9d81d60b88..a24c6729dc71 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details']
---
import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json';
diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx
index 4957a3bf0aee..b6754fd2a1b5 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-03-11
+date: 2024-03-12
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 942d9c0c96dd..752b373e035a 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util']
---
import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json';
diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx
index 7432c05b3586..26f55f46a503 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-03-11
+date: 2024-03-12
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 ff240a0b75b6..f6fcab56a5d5 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-03-11
+date: 2024-03-12
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 60d68860befc..8bcc05c2b9e9 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-03-11
+date: 2024-03-12
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 829da23d563c..be6c2875bdf2 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-03-11
+date: 2024-03-12
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 b0f9326b96c4..4f74defe2488 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-03-11
+date: 2024-03-12
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 250ae26d694b..b1852b1b2feb 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-03-11
+date: 2024-03-12
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 7aec2c4be0c7..79a5ea7b1aea 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-03-11
+date: 2024-03-12
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 92bb4f5bd5d1..416845205507 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-03-11
+date: 2024-03-12
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 c3ccfacc67e9..63821f70df21 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-03-11
+date: 2024-03-12
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 f0bf0b802af2..be56ee1636ed 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-03-11
+date: 2024-03-12
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 d1ed8be33352..ca9dd9cec09e 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers']
---
import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json';
diff --git a/api_docs/kbn_presentation_library.mdx b/api_docs/kbn_presentation_library.mdx
index 9088a3153af4..2096f3335fe7 100644
--- a/api_docs/kbn_presentation_library.mdx
+++ b/api_docs/kbn_presentation_library.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-library
title: "@kbn/presentation-library"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/presentation-library plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-library']
---
import kbnPresentationLibraryObj from './kbn_presentation_library.devdocs.json';
diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx
index 40d22c8840da..7aa024dc18b8 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing']
---
import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json';
diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx
index 0d7a35352399..82b04ed073a3 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-03-11
+date: 2024-03-12
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 00e9d7fb0298..2919f2adafd1 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-03-11
+date: 2024-03-12
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 6eada1a6c780..b55d4a33d699 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field']
---
import kbnReactFieldObj from './kbn_react_field.devdocs.json';
diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx
index adc913271d11..c0b37dd712a7 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-03-11
+date: 2024-03-12
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 e2af48ca3a4a..375f27bb9a8b 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-03-11
+date: 2024-03-12
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 e0127ce1b70b..4dfa72b2654d 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-03-11
+date: 2024-03-12
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 ffcd7eb86947..56ce19a9b42e 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-03-11
+date: 2024-03-12
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 1b0f5224c57d..8a814aefd96b 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-03-11
+date: 2024-03-12
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 a149737b11ce..7604f09f0876 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount']
---
import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json';
diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx
index 57860103a906..ebb487931377 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-03-11
+date: 2024-03-12
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 d19df722804b..3bb81eaa4e2e 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-03-11
+date: 2024-03-12
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 83b5bcc2e94d..7ff6cb803ce7 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-03-11
+date: 2024-03-12
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 f05594f8e34b..7a39b74b1246 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-03-11
+date: 2024-03-12
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 11372721b7c6..e8081ddf4e97 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common']
---
import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json';
diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx
index 01e3eee2b218..9d7c8bb0c824 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-03-11
+date: 2024-03-12
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 366a8c2e61bf..25a189d11251 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-03-11
+date: 2024-03-12
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 528ec491f536..e590c9a45a4d 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-03-11
+date: 2024-03-12
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 3b0cc4da17ed..c4d7c3738fe3 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-03-11
+date: 2024-03-12
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 6a283c0e2e2f..ce89c16838a5 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-03-11
+date: 2024-03-12
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 41c9a9ea19eb..765f586395e1 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-03-11
+date: 2024-03-12
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 0214e12a8c08..35db85b5f6d7 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-03-11
+date: 2024-03-12
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 d98a341a94eb..fc6e92bf8a2c 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-03-11
+date: 2024-03-12
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 96d60ea1f1bb..12c81757459e 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-03-11
+date: 2024-03-12
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 e4a4b6e7f8ef..f9e231100610 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout']
---
import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json';
diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx
index 331e4f8c9e73..0eedd3892589 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison']
---
import kbnRisonObj from './kbn_rison.devdocs.json';
diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx
index 04b4e4fdb199..d690c7b4f33b 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-03-11
+date: 2024-03-12
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 00438a250cb2..446450251dd0 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-03-11
+date: 2024-03-12
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 91025a67e334..d7876514717c 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-03-11
+date: 2024-03-12
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 793072d61aed..f284ad1686e2 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings']
---
import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json';
diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx
index 0a16bc8723da..8b821052a969 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-03-11
+date: 2024-03-12
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 3590ed04a274..35ca05cdaf3f 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-03-11
+date: 2024-03-12
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 2634afba1f35..99570ba8495c 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-03-11
+date: 2024-03-12
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 3354cb16fb6a..3db4f22abca2 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-03-11
+date: 2024-03-12
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 27c569631002..33730bcf2e1d 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings']
---
import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json';
diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx
index 47a5f54671c7..24f9c0e7bede 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-03-11
+date: 2024-03-12
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 215f7de97e86..9c11e8b5de8a 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-03-11
+date: 2024-03-12
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 679d0b195254..506049b320bf 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-03-11
+date: 2024-03-12
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 b2ca1f11d697..be30c0bd2865 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server']
---
import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json';
diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx
index 17b0a582337d..8d76a00d65de 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-03-11
+date: 2024-03-12
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 af3058cf3852..e13227861963 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-03-11
+date: 2024-03-12
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 6dfe5ce9a9a5..70c73c731677 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-03-11
+date: 2024-03-12
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 14a0e3abe0b8..cd40d8f44aed 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config']
---
import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx
index c7e96e7bdd78..89a6002a2d46 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-03-11
+date: 2024-03-12
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 9706790288c3..0ac2dfa6d648 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-03-11
+date: 2024-03-12
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 b3903783c4e5..f9d96e43626b 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-03-11
+date: 2024-03-12
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 26e4cb8d2aa4..c60227949fdf 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-03-11
+date: 2024-03-12
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 505a42abb8d2..3704b59ee39e 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components']
---
import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx
index 3c71da092f00..7f6959d2b187 100644
--- a/api_docs/kbn_securitysolution_grouping.mdx
+++ b/api_docs/kbn_securitysolution_grouping.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping
title: "@kbn/securitysolution-grouping"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-grouping plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping']
---
import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx
index 03a3c3748640..9c00bfeb13ca 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-03-11
+date: 2024-03-12
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 9c321d0700c2..0a7563fecf8b 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-03-11
+date: 2024-03-12
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 8af670531d47..058c3d1b2aad 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-03-11
+date: 2024-03-12
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 1eb2091fa58f..a464c6d95772 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-03-11
+date: 2024-03-12
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 73a0016cb21d..c744ed51eb58 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-03-11
+date: 2024-03-12
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 cd283112d5db..24418607d25a 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-03-11
+date: 2024-03-12
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 83af7e8bcf31..ce3f0ece24ef 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-03-11
+date: 2024-03-12
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 5afecd4c88de..d221b8aee4e6 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-03-11
+date: 2024-03-12
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 47f96d667e7f..1515f9bb8728 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-03-11
+date: 2024-03-12
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 f23fd5e08b0a..4deb25ff0ae3 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-03-11
+date: 2024-03-12
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 6e129a97f0c4..2435fe0a87fb 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-03-11
+date: 2024-03-12
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 42950362027b..d9ba11842799 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-03-11
+date: 2024-03-12
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 3c97ad9495de..4ba3cccd7bcc 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-03-11
+date: 2024-03-12
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 edde02665895..e6a378450132 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository']
---
import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json';
diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx
index 1a313045c662..031c13079f0f 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-03-11
+date: 2024-03-12
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 0f93cdf99f3b..26e925e9c1c7 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-03-11
+date: 2024-03-12
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 29b61dfd2ed3..7d2c9d49fac2 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-03-11
+date: 2024-03-12
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 c759d61b778e..c55ab9852806 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-03-11
+date: 2024-03-12
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 690e5efff803..7c504370c16a 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-03-11
+date: 2024-03-12
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 988bc0d865b5..34010b042978 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-03-11
+date: 2024-03-12
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 8074da948356..755c7ab343be 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-03-11
+date: 2024-03-12
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 b3ffb4852e7a..1663345d73f1 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-03-11
+date: 2024-03-12
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 ac13a918002d..2fb6bb08ce27 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-03-11
+date: 2024-03-12
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 074968d7401e..86cfe958d8e2 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-03-11
+date: 2024-03-12
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 e8b826099792..c11119370758 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-03-11
+date: 2024-03-12
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 b6efe94703f2..bf24d8522fbc 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-03-11
+date: 2024-03-12
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 137378d96f64..38ca3f0e8323 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-03-11
+date: 2024-03-12
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 cad3fb13e0dc..815c9080d43a 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-03-11
+date: 2024-03-12
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 aca4adda5505..757a3614c0a2 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-03-11
+date: 2024-03-12
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 54d143780382..84bec1f0fd0a 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-03-11
+date: 2024-03-12
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 2bb58ad325aa..d4eb568f208a 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-03-11
+date: 2024-03-12
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 7231bffc0de8..5a0adb8915b8 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-03-11
+date: 2024-03-12
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 73c37795c0b6..ceeb701c7d0b 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-03-11
+date: 2024-03-12
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 281f23f2c9ce..51ceebafb9c1 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-03-11
+date: 2024-03-12
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 b6337e1b9348..8bc4444ea0ba 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-03-11
+date: 2024-03-12
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 588c026d069b..b4021d83c8e2 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-03-11
+date: 2024-03-12
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 379bb1373006..332f4f915caf 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-03-11
+date: 2024-03-12
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 a67b4b5e3ccf..463162a98ac7 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-03-11
+date: 2024-03-12
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 96e99a0d52b7..f39cd3c227d3 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-03-11
+date: 2024-03-12
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 9ca2429019fa..74ab8e0287bb 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-03-11
+date: 2024-03-12
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 ac31ab75d845..727269262994 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-03-11
+date: 2024-03-12
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 e042d5f72cb4..ca0a22760e46 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-03-11
+date: 2024-03-12
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 e4c9d064c652..4dbf0dbfb7bd 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-03-11
+date: 2024-03-12
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 ec3b5fa51869..e2dc34689a1f 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-03-11
+date: 2024-03-12
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 aa6c8823c487..e550760f4b5e 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-03-11
+date: 2024-03-12
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 dcabc39ae080..9d77435a61f3 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-03-11
+date: 2024-03-12
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 3663f3299767..ee35ea2aa616 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-03-11
+date: 2024-03-12
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 af3a61ec2573..11812e167893 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-03-11
+date: 2024-03-12
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 6846d97332f4..f15b2d76ecf8 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-03-11
+date: 2024-03-12
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 af6d3c92350c..f90e2c95696a 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-03-11
+date: 2024-03-12
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 3b8ebe1f8da4..23297496fc02 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-03-11
+date: 2024-03-12
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 fc8336afc4b4..9b501e870ca8 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-03-11
+date: 2024-03-12
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 667200425774..758a554fa29a 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-03-11
+date: 2024-03-12
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 a3974f944829..7ed6aa8e1fac 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-03-11
+date: 2024-03-12
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 7d0bd1eece10..0b1fc0b7c7e3 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-03-11
+date: 2024-03-12
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 4a0e8733211a..7054c61e9efd 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-03-11
+date: 2024-03-12
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 f23b448ec377..c5937b30caf5 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-03-11
+date: 2024-03-12
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 8be425baf85c..46c6fe63287f 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock']
---
import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx
index 28d100e1f6e4..389b5140c421 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-03-11
+date: 2024-03-12
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 1e9b031c0921..3bed4155ecbe 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-03-11
+date: 2024-03-12
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 1a324da0a9a5..d14239670ddd 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-03-11
+date: 2024-03-12
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 900482b01f2b..f2ff1666386e 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates']
---
import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json';
diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx
index 1a3f3b3a7c57..51d3abf9869f 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-03-11
+date: 2024-03-12
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 06b76c6b1a9d..0232c2ae12fc 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-03-11
+date: 2024-03-12
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 e3ac6ad6b3a9..3787c8b0b903 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook']
---
import kbnStorybookObj from './kbn_storybook.devdocs.json';
diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx
index 9188aca673cd..c2d1ffc76d9a 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-03-11
+date: 2024-03-12
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 72702a196a10..f8b885631f08 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-03-11
+date: 2024-03-12
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 400b0a11ef20..49b1b9a9afbb 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-03-11
+date: 2024-03-12
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 7dcc9cce9aec..5a28ce3bae54 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-03-11
+date: 2024-03-12
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 198b59a35398..8154d883a514 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector']
---
import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json';
diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx
index 44e728272dab..a53b458603fc 100644
--- a/api_docs/kbn_text_based_editor.mdx
+++ b/api_docs/kbn_text_based_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor
title: "@kbn/text-based-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/text-based-editor plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor']
---
import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json';
diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx
index 73b003e410d8..a9096f1eea39 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-03-11
+date: 2024-03-12
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 b238ba39faf5..40f66b87d49b 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log']
---
import kbnToolingLogObj from './kbn_tooling_log.devdocs.json';
diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx
index e7418cf1a9db..bccc2f2ef64a 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types']
---
import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json';
diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx
index 3ade690c5138..1611ca8cacda 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-03-11
+date: 2024-03-12
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 5357ccbc10a3..917241554994 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-03-11
+date: 2024-03-12
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 83f17ad351b4..576a08523173 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-03-11
+date: 2024-03-12
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 4eed9c7ffed2..84cec5752f74 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-03-11
+date: 2024-03-12
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 363d394262a1..0502dc33eed3 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-03-11
+date: 2024-03-12
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 5ce21beccd0d..7625871318a7 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-03-11
+date: 2024-03-12
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 d4d51462e232..17e231b2ca2d 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-03-11
+date: 2024-03-12
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 05119178e8e1..fc5456a11276 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-03-11
+date: 2024-03-12
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 d76b354920aa..21eca5dfb251 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge']
---
import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json';
diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx
index 1afee7ee3f16..c27f92ee9f28 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-03-11
+date: 2024-03-12
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 0b58c3f2b34e..8e2bf8146186 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-03-11
+date: 2024-03-12
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 6dce10517a90..e56eafa3be1f 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-03-11
+date: 2024-03-12
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 e38abb50b3a1..e5d25eb0ddea 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-03-11
+date: 2024-03-12
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 cc7feaa3ed31..506ead098d53 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-03-11
+date: 2024-03-12
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 655dad0ed874..7a120970345a 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-03-11
+date: 2024-03-12
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 53f44995315a..1aa5ba3e7b41 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-03-11
+date: 2024-03-12
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 f8895e6c0d11..98846801bdd0 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-03-11
+date: 2024-03-12
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 9f8067195fc5..3b7bc413da65 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator']
---
import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json';
diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx
index 751fc3f3772a..231c32737974 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-03-11
+date: 2024-03-12
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 1c8a459fa971..28c3883a31c9 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-03-11
+date: 2024-03-12
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 364e9e011fcd..90085ee54908 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-03-11
+date: 2024-03-12
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 7efb92ccbc7b..b22a4f399fc3 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-03-11
+date: 2024-03-12
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 78d7e2b5fdaf..6a89d56577b0 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity']
---
import kubernetesSecurityObj from './kubernetes_security.devdocs.json';
diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json
index 8101e6f7a43f..0249b720ea6a 100644
--- a/api_docs/lens.devdocs.json
+++ b/api_docs/lens.devdocs.json
@@ -998,10 +998,10 @@
"functions": [
{
"parentPluginId": "lens",
- "id": "def-public.apiHasLensConfig",
+ "id": "def-public.isLensApi",
"type": "Function",
"tags": [],
- "label": "apiHasLensConfig",
+ "label": "isLensApi",
"description": [],
"signature": [
"(api: unknown) => api is ",
@@ -1009,17 +1009,17 @@
"pluginId": "lens",
"scope": "public",
"docId": "kibLensPluginApi",
- "section": "def-public.HasLensConfig",
- "text": "HasLensConfig"
+ "section": "def-public.LensApi",
+ "text": "LensApi"
}
],
- "path": "x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts",
+ "path": "x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts",
"deprecated": false,
"trackAdoption": false,
"children": [
{
"parentPluginId": "lens",
- "id": "def-public.apiHasLensConfig.$1",
+ "id": "def-public.isLensApi.$1",
"type": "Unknown",
"tags": [],
"label": "api",
@@ -1027,7 +1027,7 @@
"signature": [
"unknown"
],
- "path": "x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts",
+ "path": "x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts",
"deprecated": false,
"trackAdoption": false,
"isRequired": true
@@ -10822,36 +10822,6 @@
"trackAdoption": false,
"initialIsOpen": false
},
- {
- "parentPluginId": "lens",
- "id": "def-public.HasLensConfig",
- "type": "Type",
- "tags": [],
- "label": "HasLensConfig",
- "description": [],
- "signature": [
- {
- "pluginId": "@kbn/presentation-publishing",
- "scope": "common",
- "docId": "kibKbnPresentationPublishingPluginApi",
- "section": "def-common.HasType",
- "text": "HasType"
- },
- "<\"lens\"> & { getSavedVis: () => Readonly<",
- {
- "pluginId": "lens",
- "scope": "public",
- "docId": "kibLensPluginApi",
- "section": "def-public.LensSavedObjectAttributes",
- "text": "LensSavedObjectAttributes"
- },
- " | undefined>; }"
- ],
- "path": "x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts",
- "deprecated": false,
- "trackAdoption": false,
- "initialIsOpen": false
- },
{
"parentPluginId": "lens",
"id": "def-public.HeatmapVisualizationState",
@@ -10946,6 +10916,60 @@
"trackAdoption": false,
"initialIsOpen": false
},
+ {
+ "parentPluginId": "lens",
+ "id": "def-public.LensApi",
+ "type": "Type",
+ "tags": [],
+ "label": "LensApi",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.HasType",
+ "text": "HasType"
+ },
+ "<\"lens\"> & { getSavedVis: () => Readonly<",
+ {
+ "pluginId": "lens",
+ "scope": "public",
+ "docId": "kibLensPluginApi",
+ "section": "def-public.LensSavedObjectAttributes",
+ "text": "LensSavedObjectAttributes"
+ },
+ " | undefined>; } & ",
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.PublishesPanelTitle",
+ "text": "PublishesPanelTitle"
+ },
+ " & ",
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.PublishesLocalUnifiedSearch",
+ "text": "PublishesLocalUnifiedSearch"
+ },
+ " & Partial<",
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.HasParentApi",
+ "text": "HasParentApi"
+ },
+ ">"
+ ],
+ "path": "x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
{
"parentPluginId": "lens",
"id": "def-public.LensEmbeddableInput",
diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx
index 4a3669f7ade4..5e94c767b7aa 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-03-11
+date: 2024-03-12
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 1a68e4477417..25d8e3934dc6 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-03-11
+date: 2024-03-12
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 7eeb0b8356cd..1cba67df668f 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-03-11
+date: 2024-03-12
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 0055d7b36371..26d6f687d605 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-03-11
+date: 2024-03-12
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 d81141dbc0e7..539a171270d2 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-03-11
+date: 2024-03-12
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 7fc07a0909e1..8ea6cbe2d336 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists']
---
import listsObj from './lists.devdocs.json';
diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx
index 2eb711a95870..df19a9ce84e7 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer']
---
import logsExplorerObj from './logs_explorer.devdocs.json';
diff --git a/api_docs/logs_shared.devdocs.json b/api_docs/logs_shared.devdocs.json
index 240de8934f12..0fc4824cf1f3 100644
--- a/api_docs/logs_shared.devdocs.json
+++ b/api_docs/logs_shared.devdocs.json
@@ -2729,8 +2729,8 @@
"pluginId": "observabilityAIAssistant",
"scope": "public",
"docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-public.ObservabilityAIAssistantPluginStart",
- "text": "ObservabilityAIAssistantPluginStart"
+ "section": "def-public.ObservabilityAIAssistantPublicStart",
+ "text": "ObservabilityAIAssistantPublicStart"
}
],
"path": "x-pack/plugins/observability_solution/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx",
@@ -3017,8 +3017,8 @@
"pluginId": "observabilityAIAssistant",
"scope": "public",
"docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-public.ObservabilityAIAssistantPluginStart",
- "text": "ObservabilityAIAssistantPluginStart"
+ "section": "def-public.ObservabilityAIAssistantPublicStart",
+ "text": "ObservabilityAIAssistantPublicStart"
}
],
"path": "x-pack/plugins/observability_solution/logs_shared/public/types.ts",
diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx
index 7c413d187df8..5cb488dcbacc 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-03-11
+date: 2024-03-12
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 b23c0b7eb371..bbf454af5787 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management']
---
import managementObj from './management.devdocs.json';
diff --git a/api_docs/maps.devdocs.json b/api_docs/maps.devdocs.json
index 31a5f2ead02e..832647b97e45 100644
--- a/api_docs/maps.devdocs.json
+++ b/api_docs/maps.devdocs.json
@@ -1395,7 +1395,48 @@
"initialIsOpen": false
}
],
- "functions": [],
+ "functions": [
+ {
+ "parentPluginId": "maps",
+ "id": "def-public.isMapApi",
+ "type": "Function",
+ "tags": [],
+ "label": "isMapApi",
+ "description": [],
+ "signature": [
+ "(api: unknown) => api is ",
+ {
+ "pluginId": "maps",
+ "scope": "public",
+ "docId": "kibMapsPluginApi",
+ "section": "def-public.MapApi",
+ "text": "MapApi"
+ }
+ ],
+ "path": "x-pack/plugins/maps/public/embeddable/map_api.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "maps",
+ "id": "def-public.isMapApi.$1",
+ "type": "Unknown",
+ "tags": [],
+ "label": "api",
+ "description": [],
+ "signature": [
+ "unknown"
+ ],
+ "path": "x-pack/plugins/maps/public/embeddable/map_api.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ }
+ ],
"interfaces": [
{
"parentPluginId": "maps",
@@ -3927,6 +3968,62 @@
"trackAdoption": false,
"initialIsOpen": false
},
+ {
+ "parentPluginId": "maps",
+ "id": "def-public.MapApi",
+ "type": "Type",
+ "tags": [],
+ "label": "MapApi",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.HasType",
+ "text": "HasType"
+ },
+ "<\"map\"> & { getLayerList: () => ",
+ "ILayer",
+ "[]; } & ",
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.PublishesDataViews",
+ "text": "PublishesDataViews"
+ },
+ " & ",
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.PublishesPanelTitle",
+ "text": "PublishesPanelTitle"
+ },
+ " & ",
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.PublishesLocalUnifiedSearch",
+ "text": "PublishesLocalUnifiedSearch"
+ },
+ " & Partial<",
+ {
+ "pluginId": "@kbn/presentation-publishing",
+ "scope": "common",
+ "docId": "kibKbnPresentationPublishingPluginApi",
+ "section": "def-common.HasParentApi",
+ "text": "HasParentApi"
+ },
+ ">"
+ ],
+ "path": "x-pack/plugins/maps/public/embeddable/map_api.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
{
"parentPluginId": "maps",
"id": "def-public.MapEmbeddableInput",
diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx
index eee8d0c6572a..7d02bd9db097 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps']
---
import mapsObj from './maps.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis)
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 261 | 0 | 260 | 28 |
+| 264 | 0 | 263 | 28 |
## Client
@@ -31,6 +31,9 @@ Contact [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis)
### Start
+### Functions
+
+
### Classes
diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx
index 0239d8189b2a..1bc3e9942f31 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-03-11
+date: 2024-03-12
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 ea0b44a1d513..90f8c345bde5 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-03-11
+date: 2024-03-12
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 e6c111361b4a..62f1df9b3cac 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-03-11
+date: 2024-03-12
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 350813cf81a8..9d0ebee44ac0 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-03-11
+date: 2024-03-12
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 e3abb6c31373..66d0c6d84aa2 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-03-11
+date: 2024-03-12
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 4f88896facf9..5d1a253fd411 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-03-11
+date: 2024-03-12
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 8c3905991ac7..2a4b38b5f042 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-03-11
+date: 2024-03-12
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 ce555648ca9e..03d453268012 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-03-11
+date: 2024-03-12
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 63aa33b394e2..6862485fcb68 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-03-11
+date: 2024-03-12
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 80782cc448e0..b3fbd0448720 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications']
---
import notificationsObj from './notifications.devdocs.json';
diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json
index dd39124bac3e..efe71a879f88 100644
--- a/api_docs/observability.devdocs.json
+++ b/api_docs/observability.devdocs.json
@@ -2494,8 +2494,8 @@
"pluginId": "observabilityAIAssistant",
"scope": "public",
"docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-public.ObservabilityAIAssistantPluginSetup",
- "text": "ObservabilityAIAssistantPluginSetup"
+ "section": "def-public.ObservabilityAIAssistantPublicSetup",
+ "text": "ObservabilityAIAssistantPublicSetup"
}
],
"path": "x-pack/plugins/observability_solution/observability/public/plugin.ts",
@@ -3143,8 +3143,8 @@
"pluginId": "observabilityAIAssistant",
"scope": "public",
"docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-public.ObservabilityAIAssistantPluginStart",
- "text": "ObservabilityAIAssistantPluginStart"
+ "section": "def-public.ObservabilityAIAssistantPublicStart",
+ "text": "ObservabilityAIAssistantPublicStart"
}
],
"path": "x-pack/plugins/observability_solution/observability/public/plugin.ts",
diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx
index d108670b8cc4..c05624fadabe 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability']
---
import observabilityObj from './observability.devdocs.json';
diff --git a/api_docs/observability_a_i_assistant.devdocs.json b/api_docs/observability_a_i_assistant.devdocs.json
index 060da21aefe1..12712e215a06 100644
--- a/api_docs/observability_a_i_assistant.devdocs.json
+++ b/api_docs/observability_a_i_assistant.devdocs.json
@@ -2,147 +2,576 @@
"id": "observabilityAIAssistant",
"client": {
"classes": [],
- "functions": [],
- "interfaces": [
+ "functions": [
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Conversation",
- "type": "Interface",
+ "id": "def-public.AssistantAvatar",
+ "type": "Function",
"tags": [],
- "label": "Conversation",
+ "label": "AssistantAvatar",
"description": [],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "signature": [
+ "({ size = 's', css }: ",
+ "AssistantAvatarProps",
+ ") => JSX.Element"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx",
"deprecated": false,
"trackAdoption": false,
"children": [
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Conversation.timestamp",
- "type": "string",
- "tags": [],
- "label": "'@timestamp'",
- "description": [],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
- "deprecated": false,
- "trackAdoption": false
- },
- {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Conversation.user",
+ "id": "def-public.AssistantAvatar.$1",
"type": "Object",
"tags": [],
- "label": "user",
+ "label": "{ size = 's', css }",
"description": [],
"signature": [
- "{ id?: string | undefined; name: string; }"
+ "AssistantAvatarProps"
],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx",
"deprecated": false,
- "trackAdoption": false
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatItemControls",
+ "type": "Function",
+ "tags": [],
+ "label": "ChatItemControls",
+ "description": [],
+ "signature": [
+ "({\n error,\n loading,\n canRegenerate,\n canGiveFeedback,\n onFeedbackClick,\n onRegenerateClick,\n onStopGeneratingClick,\n}: { error: any; loading: boolean; canRegenerate: boolean; canGiveFeedback: boolean; onFeedbackClick: (feedback: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.Feedback",
+ "text": "Feedback"
},
+ ") => void; onRegenerateClick: () => void; onStopGeneratingClick: () => void; }) => JSX.Element | null"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Conversation.conversation",
+ "id": "def-public.ChatItemControls.$1",
"type": "Object",
"tags": [],
- "label": "conversation",
+ "label": "{\n error,\n loading,\n canRegenerate,\n canGiveFeedback,\n onFeedbackClick,\n onRegenerateClick,\n onStopGeneratingClick,\n}",
"description": [],
- "signature": [
- "{ id: string; title: string; last_updated: string; }"
- ],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx",
"deprecated": false,
- "trackAdoption": false
- },
- {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Conversation.messages",
- "type": "Array",
- "tags": [],
- "label": "messages",
- "description": [],
- "signature": [
+ "trackAdoption": false,
+ "children": [
{
- "pluginId": "observabilityAIAssistant",
- "scope": "common",
- "docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-common.Message",
- "text": "Message"
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatItemControls.$1.error",
+ "type": "Any",
+ "tags": [],
+ "label": "error",
+ "description": [],
+ "signature": [
+ "any"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx",
+ "deprecated": false,
+ "trackAdoption": false
},
- "[]"
- ],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
- "deprecated": false,
- "trackAdoption": false
- },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatItemControls.$1.loading",
+ "type": "boolean",
+ "tags": [],
+ "label": "loading",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatItemControls.$1.canRegenerate",
+ "type": "boolean",
+ "tags": [],
+ "label": "canRegenerate",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatItemControls.$1.canGiveFeedback",
+ "type": "boolean",
+ "tags": [],
+ "label": "canGiveFeedback",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatItemControls.$1.onFeedbackClick",
+ "type": "Function",
+ "tags": [],
+ "label": "onFeedbackClick",
+ "description": [],
+ "signature": [
+ "(feedback: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.Feedback",
+ "text": "Feedback"
+ },
+ ") => void"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatItemControls.$1.onFeedbackClick.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "feedback",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.Feedback",
+ "text": "Feedback"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": []
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatItemControls.$1.onRegenerateClick",
+ "type": "Function",
+ "tags": [],
+ "label": "onRegenerateClick",
+ "description": [],
+ "signature": [
+ "() => void"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "returnComment": []
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatItemControls.$1.onStopGeneratingClick",
+ "type": "Function",
+ "tags": [],
+ "label": "onStopGeneratingClick",
+ "description": [],
+ "signature": [
+ "() => void"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "returnComment": []
+ }
+ ]
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ConnectorSelectorBase",
+ "type": "Function",
+ "tags": [],
+ "label": "ConnectorSelectorBase",
+ "description": [],
+ "signature": [
+ "(props: ",
+ "UseGenAIConnectorsResult",
+ ") => JSX.Element"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/connector_selector/connector_selector_base.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Conversation.labels",
+ "id": "def-public.ConnectorSelectorBase.$1",
"type": "Object",
"tags": [],
- "label": "labels",
+ "label": "props",
"description": [],
"signature": [
- "{ [x: string]: string; }"
+ "UseGenAIConnectorsResult"
],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/connector_selector/connector_selector_base.tsx",
"deprecated": false,
- "trackAdoption": false
- },
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.createStorybookChatService",
+ "type": "Function",
+ "tags": [],
+ "label": "createStorybookChatService",
+ "description": [],
+ "signature": [
+ "() => ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantChatService",
+ "text": "ObservabilityAIAssistantChatService"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.createStorybookService",
+ "type": "Function",
+ "tags": [],
+ "label": "createStorybookService",
+ "description": [],
+ "signature": [
+ "() => ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantService",
+ "text": "ObservabilityAIAssistantService"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.FailedToLoadResponse",
+ "type": "Function",
+ "tags": [],
+ "label": "FailedToLoadResponse",
+ "description": [],
+ "signature": [
+ "() => JSX.Element"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/message_panel/failed_to_load_response.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.FeedbackButtons",
+ "type": "Function",
+ "tags": [],
+ "label": "FeedbackButtons",
+ "description": [],
+ "signature": [
+ "({ onClickFeedback }: FeedbackButtonsProps) => JSX.Element"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/feedback_buttons.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Conversation.numeric_labels",
+ "id": "def-public.FeedbackButtons.$1",
"type": "Object",
"tags": [],
- "label": "numeric_labels",
+ "label": "{ onClickFeedback }",
"description": [],
"signature": [
- "{ [x: string]: number; }"
+ "FeedbackButtonsProps"
],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
- "deprecated": false,
- "trackAdoption": false
- },
- {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Conversation.namespace",
- "type": "string",
- "tags": [],
- "label": "namespace",
- "description": [],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
- "deprecated": false,
- "trackAdoption": false
- },
- {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Conversation.public",
- "type": "boolean",
- "tags": [],
- "label": "public",
- "description": [],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/feedback_buttons.tsx",
"deprecated": false,
- "trackAdoption": false
+ "trackAdoption": false,
+ "isRequired": true
}
],
+ "returnComment": [],
"initialIsOpen": false
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.KnowledgeBaseEntry",
- "type": "Interface",
+ "id": "def-public.getAssistantSystemMessage",
+ "type": "Function",
"tags": [],
- "label": "KnowledgeBaseEntry",
+ "label": "getAssistantSystemMessage",
"description": [],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "signature": [
+ "({\n contexts,\n}: { contexts: ",
+ "ContextDefinition",
+ "[]; }) => ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_system_message.ts",
"deprecated": false,
"trackAdoption": false,
"children": [
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.KnowledgeBaseEntry.timestamp",
- "type": "string",
+ "id": "def-public.getAssistantSystemMessage.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "{\n contexts,\n}",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_system_message.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.getAssistantSystemMessage.$1.contexts",
+ "type": "Array",
+ "tags": [],
+ "label": "contexts",
+ "description": [],
+ "signature": [
+ "ContextDefinition",
+ "[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_system_message.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ]
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.isSupportedConnectorType",
+ "type": "Function",
+ "tags": [],
+ "label": "isSupportedConnectorType",
+ "description": [],
+ "signature": [
+ "(type: string) => boolean"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/connectors.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.isSupportedConnectorType.$1",
+ "type": "string",
+ "tags": [],
+ "label": "type",
+ "description": [],
+ "signature": [
+ "string"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/connectors.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.MessageText",
+ "type": "Function",
+ "tags": [],
+ "label": "MessageText",
+ "description": [],
+ "signature": [
+ "({ loading, content, onActionClick }: Props) => JSX.Element"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/message_panel/message_text.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.MessageText.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "{ loading, content, onActionClick }",
+ "description": [],
+ "signature": [
+ "Props"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/message_panel/message_text.tsx",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.useAbortableAsync",
+ "type": "Function",
+ "tags": [],
+ "label": "useAbortableAsync",
+ "description": [],
+ "signature": [
+ "(fn: ({}: { signal: AbortSignal; }) => T | Promise, deps: any[], options: { clearValueOnNext?: boolean | undefined; defaultValue?: (() => T) | undefined; } | undefined) => ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.AbortableAsyncState",
+ "text": "AbortableAsyncState"
+ },
+ ""
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.useAbortableAsync.$1",
+ "type": "Function",
+ "tags": [],
+ "label": "fn",
+ "description": [],
+ "signature": [
+ "({}: { signal: AbortSignal; }) => T | Promise"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.useAbortableAsync.$2",
+ "type": "Array",
+ "tags": [],
+ "label": "deps",
+ "description": [],
+ "signature": [
+ "any[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.useAbortableAsync.$3",
+ "type": "Object",
+ "tags": [],
+ "label": "options",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.useAbortableAsync.$3.clearValueOnNext",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "clearValueOnNext",
+ "description": [],
+ "signature": [
+ "boolean | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.useAbortableAsync.$3.defaultValue",
+ "type": "Function",
+ "tags": [],
+ "label": "defaultValue",
+ "description": [],
+ "signature": [
+ "(() => T) | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "returnComment": []
+ }
+ ]
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ }
+ ],
+ "interfaces": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.Conversation",
+ "type": "Interface",
+ "tags": [],
+ "label": "Conversation",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.Conversation.timestamp",
+ "type": "string",
"tags": [],
"label": "'@timestamp'",
"description": [],
@@ -152,46 +581,62 @@
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.KnowledgeBaseEntry.id",
- "type": "string",
+ "id": "def-public.Conversation.user",
+ "type": "Object",
"tags": [],
- "label": "id",
+ "label": "user",
"description": [],
+ "signature": [
+ "{ id?: string | undefined; name: string; }"
+ ],
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
"deprecated": false,
"trackAdoption": false
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.KnowledgeBaseEntry.text",
- "type": "string",
+ "id": "def-public.Conversation.conversation",
+ "type": "Object",
"tags": [],
- "label": "text",
+ "label": "conversation",
"description": [],
+ "signature": [
+ "{ id: string; title: string; last_updated: string; }"
+ ],
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
"deprecated": false,
"trackAdoption": false
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.KnowledgeBaseEntry.doc_id",
- "type": "string",
+ "id": "def-public.Conversation.messages",
+ "type": "Array",
"tags": [],
- "label": "doc_id",
+ "label": "messages",
"description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]"
+ ],
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
"deprecated": false,
"trackAdoption": false
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.KnowledgeBaseEntry.confidence",
- "type": "CompoundType",
+ "id": "def-public.Conversation.labels",
+ "type": "Object",
"tags": [],
- "label": "confidence",
+ "label": "labels",
"description": [],
"signature": [
- "\"medium\" | \"high\" | \"low\""
+ "{ [x: string]: string; }"
],
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
"deprecated": false,
@@ -199,18 +644,32 @@
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.KnowledgeBaseEntry.is_correction",
- "type": "boolean",
+ "id": "def-public.Conversation.numeric_labels",
+ "type": "Object",
"tags": [],
- "label": "is_correction",
+ "label": "numeric_labels",
"description": [],
+ "signature": [
+ "{ [x: string]: number; }"
+ ],
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
"deprecated": false,
"trackAdoption": false
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.KnowledgeBaseEntry.public",
+ "id": "def-public.Conversation.namespace",
+ "type": "string",
+ "tags": [],
+ "label": "namespace",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.Conversation.public",
"type": "boolean",
"tags": [],
"label": "public",
@@ -218,111 +677,802 @@
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
"deprecated": false,
"trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.KnowledgeBaseEntry",
+ "type": "Interface",
+ "tags": [],
+ "label": "KnowledgeBaseEntry",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.KnowledgeBaseEntry.timestamp",
+ "type": "string",
+ "tags": [],
+ "label": "'@timestamp'",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.KnowledgeBaseEntry.id",
+ "type": "string",
+ "tags": [],
+ "label": "id",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.KnowledgeBaseEntry.text",
+ "type": "string",
+ "tags": [],
+ "label": "text",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.KnowledgeBaseEntry.doc_id",
+ "type": "string",
+ "tags": [],
+ "label": "doc_id",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.KnowledgeBaseEntry.confidence",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "confidence",
+ "description": [],
+ "signature": [
+ "\"medium\" | \"high\" | \"low\""
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.KnowledgeBaseEntry.is_correction",
+ "type": "boolean",
+ "tags": [],
+ "label": "is_correction",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.KnowledgeBaseEntry.public",
+ "type": "boolean",
+ "tags": [],
+ "label": "public",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.KnowledgeBaseEntry.labels",
+ "type": "Object",
+ "tags": [],
+ "label": "labels",
+ "description": [],
+ "signature": [
+ "Record | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.KnowledgeBaseEntry.role",
+ "type": "Enum",
+ "tags": [],
+ "label": "role",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.KnowledgeBaseEntryRole",
+ "text": "KnowledgeBaseEntryRole"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.Message",
+ "type": "Interface",
+ "tags": [],
+ "label": "Message",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.Message.timestamp",
+ "type": "string",
+ "tags": [],
+ "label": "'@timestamp'",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.Message.message",
+ "type": "Object",
+ "tags": [],
+ "label": "message",
+ "description": [],
+ "signature": [
+ "{ content?: string | undefined; name?: string | undefined; role: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.MessageRole",
+ "text": "MessageRole"
+ },
+ "; function_call?: { name: string; arguments?: string | undefined; trigger: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.MessageRole",
+ "text": "MessageRole"
+ },
+ ".Assistant | ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.MessageRole",
+ "text": "MessageRole"
+ },
+ ".User | ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.MessageRole",
+ "text": "MessageRole"
+ },
+ ".Elastic; } | undefined; data?: string | undefined; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService",
+ "type": "Interface",
+ "tags": [],
+ "label": "ObservabilityAIAssistantChatService",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.sendAnalyticsEvent",
+ "type": "Function",
+ "tags": [],
+ "label": "sendAnalyticsEvent",
+ "description": [],
+ "signature": [
+ "(event: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.TelemetryEventTypeWithPayload",
+ "text": "TelemetryEventTypeWithPayload"
+ },
+ ") => void"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.sendAnalyticsEvent.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "event",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.TelemetryEventTypeWithPayload",
+ "text": "TelemetryEventTypeWithPayload"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": []
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.chat",
+ "type": "Function",
+ "tags": [],
+ "label": "chat",
+ "description": [],
+ "signature": [
+ "(name: string, options: { messages: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]; connectorId: string; function?: \"none\" | \"auto\" | undefined; signal: AbortSignal; }) => ",
+ "Observable",
+ "<",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.StreamingChatResponseEventWithoutError",
+ "text": "StreamingChatResponseEventWithoutError"
+ },
+ ">"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.chat.$1",
+ "type": "string",
+ "tags": [],
+ "label": "name",
+ "description": [],
+ "signature": [
+ "string"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.chat.$2",
+ "type": "Object",
+ "tags": [],
+ "label": "options",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.chat.$2.messages",
+ "type": "Array",
+ "tags": [],
+ "label": "messages",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.chat.$2.connectorId",
+ "type": "string",
+ "tags": [],
+ "label": "connectorId",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.chat.$2.function",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "function",
+ "description": [],
+ "signature": [
+ "\"none\" | \"auto\" | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.chat.$2.signal",
+ "type": "Object",
+ "tags": [],
+ "label": "signal",
+ "description": [],
+ "signature": [
+ "AbortSignal"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ]
+ }
+ ],
+ "returnComment": []
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.complete",
+ "type": "Function",
+ "tags": [],
+ "label": "complete",
+ "description": [],
+ "signature": [
+ "(options: { screenContexts: ",
+ "ObservabilityAIAssistantScreenContext",
+ "[]; conversationId?: string | undefined; connectorId: string; messages: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]; persist: boolean; signal: AbortSignal; responseLanguage: string; }) => ",
+ "Observable",
+ "<",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.StreamingChatResponseEventWithoutError",
+ "text": "StreamingChatResponseEventWithoutError"
+ },
+ ">"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.complete.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "options",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.screenContexts",
+ "type": "Array",
+ "tags": [],
+ "label": "screenContexts",
+ "description": [],
+ "signature": [
+ "ObservabilityAIAssistantScreenContext",
+ "[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.conversationId",
+ "type": "string",
+ "tags": [],
+ "label": "conversationId",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.connectorId",
+ "type": "string",
+ "tags": [],
+ "label": "connectorId",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.messages",
+ "type": "Array",
+ "tags": [],
+ "label": "messages",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.persist",
+ "type": "boolean",
+ "tags": [],
+ "label": "persist",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.signal",
+ "type": "Object",
+ "tags": [],
+ "label": "signal",
+ "description": [],
+ "signature": [
+ "AbortSignal"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.responseLanguage",
+ "type": "string",
+ "tags": [],
+ "label": "responseLanguage",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ]
+ }
+ ],
+ "returnComment": []
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.getContexts",
+ "type": "Function",
+ "tags": [],
+ "label": "getContexts",
+ "description": [],
+ "signature": [
+ "() => ",
+ "ContextDefinition",
+ "[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "returnComment": []
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.getFunctions",
+ "type": "Function",
+ "tags": [],
+ "label": "getFunctions",
+ "description": [],
+ "signature": [
+ "(options?: { contexts?: string[] | undefined; filter?: string | undefined; } | undefined) => ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.FunctionDefinition",
+ "text": "FunctionDefinition"
+ },
+ "<",
+ "CompatibleJSONSchema",
+ ">[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.getFunctions.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "options",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.getFunctions.$1.contexts",
+ "type": "Array",
+ "tags": [],
+ "label": "contexts",
+ "description": [],
+ "signature": [
+ "string[] | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.getFunctions.$1.filter",
+ "type": "string",
+ "tags": [],
+ "label": "filter",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ]
+ }
+ ],
+ "returnComment": []
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.KnowledgeBaseEntry.labels",
- "type": "Object",
+ "id": "def-public.ObservabilityAIAssistantChatService.hasFunction",
+ "type": "Function",
"tags": [],
- "label": "labels",
+ "label": "hasFunction",
"description": [],
"signature": [
- "Record | undefined"
+ "(name: string) => boolean"
],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
"deprecated": false,
- "trackAdoption": false
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.hasFunction.$1",
+ "type": "string",
+ "tags": [],
+ "label": "name",
+ "description": [],
+ "signature": [
+ "string"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": []
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.KnowledgeBaseEntry.role",
- "type": "Enum",
+ "id": "def-public.ObservabilityAIAssistantChatService.hasRenderFunction",
+ "type": "Function",
"tags": [],
- "label": "role",
+ "label": "hasRenderFunction",
"description": [],
"signature": [
+ "(name: string) => boolean"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
{
- "pluginId": "observabilityAIAssistant",
- "scope": "common",
- "docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-common.KnowledgeBaseEntryRole",
- "text": "KnowledgeBaseEntryRole"
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.hasRenderFunction.$1",
+ "type": "string",
+ "tags": [],
+ "label": "name",
+ "description": [],
+ "signature": [
+ "string"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
}
],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
- "deprecated": false,
- "trackAdoption": false
- }
- ],
- "initialIsOpen": false
- },
- {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Message",
- "type": "Interface",
- "tags": [],
- "label": "Message",
- "description": [],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
- "deprecated": false,
- "trackAdoption": false,
- "children": [
- {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Message.timestamp",
- "type": "string",
- "tags": [],
- "label": "'@timestamp'",
- "description": [],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
- "deprecated": false,
- "trackAdoption": false
+ "returnComment": []
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.Message.message",
- "type": "Object",
+ "id": "def-public.ObservabilityAIAssistantChatService.renderFunction",
+ "type": "Function",
"tags": [],
- "label": "message",
+ "label": "renderFunction",
"description": [],
"signature": [
- "{ content?: string | undefined; name?: string | undefined; role: ",
+ "(name: string, args: string | undefined, response: { data?: string | undefined; content?: string | undefined; }, onActionClick: ",
{
"pluginId": "observabilityAIAssistant",
- "scope": "common",
+ "scope": "public",
"docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-common.MessageRole",
- "text": "MessageRole"
+ "section": "def-public.ChatActionClickHandler",
+ "text": "ChatActionClickHandler"
},
- "; function_call?: { name: string; arguments?: string | undefined; trigger: ",
+ ") => React.ReactNode"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
{
- "pluginId": "observabilityAIAssistant",
- "scope": "common",
- "docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-common.MessageRole",
- "text": "MessageRole"
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$1",
+ "type": "string",
+ "tags": [],
+ "label": "name",
+ "description": [],
+ "signature": [
+ "string"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
},
- ".Assistant | ",
{
- "pluginId": "observabilityAIAssistant",
- "scope": "common",
- "docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-common.MessageRole",
- "text": "MessageRole"
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$2",
+ "type": "string",
+ "tags": [],
+ "label": "args",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": false
},
- ".User | ",
{
- "pluginId": "observabilityAIAssistant",
- "scope": "common",
- "docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-common.MessageRole",
- "text": "MessageRole"
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$3",
+ "type": "Object",
+ "tags": [],
+ "label": "response",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$3.data",
+ "type": "string",
+ "tags": [],
+ "label": "data",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$3.content",
+ "type": "string",
+ "tags": [],
+ "label": "content",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ]
},
- ".Elastic; } | undefined; data?: string | undefined; }"
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$4",
+ "type": "Function",
+ "tags": [],
+ "label": "onActionClick",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ChatActionClickHandler",
+ "text": "ChatActionClickHandler"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
- "deprecated": false,
- "trackAdoption": false
+ "returnComment": []
}
],
"initialIsOpen": false
@@ -338,22 +1488,6 @@
"deprecated": false,
"trackAdoption": false,
"children": [
- {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-public.ObservabilityAIAssistantService.isEnabled",
- "type": "Function",
- "tags": [],
- "label": "isEnabled",
- "description": [],
- "signature": [
- "() => boolean"
- ],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
- "deprecated": false,
- "trackAdoption": false,
- "children": [],
- "returnComment": []
- },
{
"parentPluginId": "observabilityAIAssistant",
"id": "def-public.ObservabilityAIAssistantService.callApi",
@@ -611,7 +1745,13 @@
"; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ",
"ObservabilityAIAssistantRouteHandlerResources",
") => Promise<{ functionDefinitions: ",
- "FunctionDefinition",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.FunctionDefinition",
+ "text": "FunctionDefinition"
+ },
"<",
"CompatibleJSONSchema",
">[]; contextDefinitions: ",
@@ -1119,7 +2259,13 @@
"; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ",
"ObservabilityAIAssistantRouteHandlerResources",
") => Promise<{ functionDefinitions: ",
- "FunctionDefinition",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.FunctionDefinition",
+ "text": "FunctionDefinition"
+ },
"<",
"CompatibleJSONSchema",
">[]; contextDefinitions: ",
@@ -1428,78 +2574,27 @@
{
"pluginId": "@kbn/server-route-repository",
"scope": "common",
- "docId": "kibKbnServerRouteRepositoryPluginApi",
- "section": "def-common.ClientRequestParamsOf",
- "text": "ClientRequestParamsOf"
- },
- " & TAdditionalClientOptions]"
- ],
- "path": "packages/kbn-server-route-repository/src/typings.ts",
- "deprecated": false,
- "trackAdoption": false
- }
- ]
- },
- {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-public.ObservabilityAIAssistantService.getCurrentUser",
- "type": "Function",
- "tags": [],
- "label": "getCurrentUser",
- "description": [],
- "signature": [
- "() => Promise<",
- {
- "pluginId": "@kbn/security-plugin-types-common",
- "scope": "common",
- "docId": "kibKbnSecurityPluginTypesCommonPluginApi",
- "section": "def-common.AuthenticatedUser",
- "text": "AuthenticatedUser"
- },
- ">"
- ],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
- "deprecated": false,
- "trackAdoption": false,
- "children": [],
- "returnComment": []
- },
- {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-public.ObservabilityAIAssistantService.getLicense",
- "type": "Function",
- "tags": [],
- "label": "getLicense",
- "description": [],
- "signature": [
- "() => ",
- "Observable",
- "<",
- "ILicense",
- ">"
- ],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
- "deprecated": false,
- "trackAdoption": false,
- "children": [],
- "returnComment": []
+ "docId": "kibKbnServerRouteRepositoryPluginApi",
+ "section": "def-common.ClientRequestParamsOf",
+ "text": "ClientRequestParamsOf"
+ },
+ " & TAdditionalClientOptions]"
+ ],
+ "path": "packages/kbn-server-route-repository/src/typings.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ]
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.ObservabilityAIAssistantService.getLicenseManagementLocator",
+ "id": "def-public.ObservabilityAIAssistantService.isEnabled",
"type": "Function",
"tags": [],
- "label": "getLicenseManagementLocator",
+ "label": "isEnabled",
"description": [],
"signature": [
- "() => ",
- {
- "pluginId": "share",
- "scope": "public",
- "docId": "kibSharePluginApi",
- "section": "def-public.SharePublicStart",
- "text": "SharePublicStart"
- }
+ "() => boolean"
],
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
"deprecated": false,
@@ -1516,7 +2611,13 @@
"description": [],
"signature": [
"({}: { signal: AbortSignal; }) => Promise<",
- "ObservabilityAIAssistantChatService",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantChatService",
+ "text": "ObservabilityAIAssistantChatService"
+ },
">"
],
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
@@ -1638,12 +2739,227 @@
"trackAdoption": false,
"children": [],
"returnComment": []
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantService.conversations",
+ "type": "Object",
+ "tags": [],
+ "label": "conversations",
+ "description": [],
+ "signature": [
+ "ObservabilityAIAssistantConversationService"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.UseChatResult",
+ "type": "Interface",
+ "tags": [],
+ "label": "UseChatResult",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.UseChatResult.messages",
+ "type": "Array",
+ "tags": [],
+ "label": "messages",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.UseChatResult.setMessages",
+ "type": "Function",
+ "tags": [],
+ "label": "setMessages",
+ "description": [],
+ "signature": [
+ "(messages: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]) => void"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.UseChatResult.setMessages.$1",
+ "type": "Array",
+ "tags": [],
+ "label": "messages",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": []
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.UseChatResult.state",
+ "type": "Enum",
+ "tags": [],
+ "label": "state",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ChatState",
+ "text": "ChatState"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.UseChatResult.next",
+ "type": "Function",
+ "tags": [],
+ "label": "next",
+ "description": [],
+ "signature": [
+ "(messages: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]) => void"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.UseChatResult.next.$1",
+ "type": "Array",
+ "tags": [],
+ "label": "messages",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": []
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.UseChatResult.stop",
+ "type": "Function",
+ "tags": [],
+ "label": "stop",
+ "description": [],
+ "signature": [
+ "() => void"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "returnComment": []
}
],
"initialIsOpen": false
}
],
"enums": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatActionClickType",
+ "type": "Enum",
+ "tags": [],
+ "label": "ChatActionClickType",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatState",
+ "type": "Enum",
+ "tags": [],
+ "label": "ChatState",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.FunctionVisibility",
+ "type": "Enum",
+ "tags": [],
+ "label": "FunctionVisibility",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/function_visibility.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
{
"parentPluginId": "observabilityAIAssistant",
"id": "def-public.KnowledgeBaseEntryRole",
@@ -1667,9 +2983,48 @@
"deprecated": false,
"trackAdoption": false,
"initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantTelemetryEventType",
+ "type": "Enum",
+ "tags": [],
+ "label": "ObservabilityAIAssistantTelemetryEventType",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/telemetry_event_type.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.VisualizeESQLUserIntention",
+ "type": "Enum",
+ "tags": [],
+ "label": "VisualizeESQLUserIntention",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
}
],
"misc": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.AbortableAsyncState",
+ "type": "Type",
+ "tags": [],
+ "label": "AbortableAsyncState",
+ "description": [],
+ "signature": [
+ "(T extends Promise ? State : State) & { refresh: () => void; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
{
"parentPluginId": "observabilityAIAssistant",
"id": "def-public.APIReturnType",
@@ -1919,7 +3274,13 @@
"; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ",
"ObservabilityAIAssistantRouteHandlerResources",
") => Promise<{ functionDefinitions: ",
- "FunctionDefinition",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.FunctionDefinition",
+ "text": "FunctionDefinition"
+ },
"<",
"CompatibleJSONSchema",
">[]; contextDefinitions: ",
@@ -2169,20 +3530,114 @@
" & { params: { body: { name: string; messages: ",
{
"pluginId": "observabilityAIAssistant",
- "scope": "common",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<",
+ "Readable",
+ ">; } & ",
+ "ObservabilityAIAssistantRouteCreateOptions",
+ "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ",
+ "ServerRouteCreateOptions",
+ " ? TReturnType : never"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/api/index.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatActionClickHandler",
+ "type": "Type",
+ "tags": [],
+ "label": "ChatActionClickHandler",
+ "description": [],
+ "signature": [
+ "(payload: ChatActionClickPayloadExecuteEsql) => void"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "returnComment": [],
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatActionClickHandler.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "payload",
+ "description": [],
+ "signature": [
+ "{ type: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ChatActionClickType",
+ "text": "ChatActionClickType"
+ },
+ "; } & { query: string; userOverrides?: ",
+ {
+ "pluginId": "lens",
+ "scope": "public",
+ "docId": "kibLensPluginApi",
+ "section": "def-public.TypedLensByValueInput",
+ "text": "TypedLensByValueInput"
+ },
+ " | undefined; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ChatActionClickPayload",
+ "type": "Type",
+ "tags": [],
+ "label": "ChatActionClickPayload",
+ "description": [],
+ "signature": [
+ "{ type: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
"docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-common.Message",
- "text": "Message"
+ "section": "def-public.ChatActionClickType",
+ "text": "ChatActionClickType"
},
- "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<",
- "Readable",
- ">; } & ",
- "ObservabilityAIAssistantRouteCreateOptions",
- "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ",
- "ServerRouteCreateOptions",
- " ? TReturnType : never"
+ "; } & { query: string; userOverrides?: ",
+ {
+ "pluginId": "lens",
+ "scope": "public",
+ "docId": "kibLensPluginApi",
+ "section": "def-public.TypedLensByValueInput",
+ "text": "TypedLensByValueInput"
+ },
+ " | undefined; }"
],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/api/index.ts",
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.Feedback",
+ "type": "Type",
+ "tags": [],
+ "label": "Feedback",
+ "description": [],
+ "signature": [
+ "\"negative\" | \"positive\""
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/feedback_buttons.tsx",
"deprecated": false,
"trackAdoption": false,
"initialIsOpen": false
@@ -2436,7 +3891,13 @@
"; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ",
"ObservabilityAIAssistantRouteHandlerResources",
") => Promise<{ functionDefinitions: ",
- "FunctionDefinition",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.FunctionDefinition",
+ "text": "FunctionDefinition"
+ },
"<",
"CompatibleJSONSchema",
">[]; contextDefinitions: ",
@@ -2734,15 +4195,220 @@
"deprecated": false,
"trackAdoption": false,
"initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.RegisterRenderFunctionDefinition",
+ "type": "Type",
+ "tags": [],
+ "label": "RegisterRenderFunctionDefinition",
+ "description": [],
+ "signature": [
+ "(name: string, render: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.RenderFunction",
+ "text": "RenderFunction"
+ },
+ ") => void"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "returnComment": [],
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.RegisterRenderFunctionDefinition.$1",
+ "type": "string",
+ "tags": [],
+ "label": "name",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.RegisterRenderFunctionDefinition.$2",
+ "type": "Function",
+ "tags": [],
+ "label": "render",
+ "description": [],
+ "signature": [
+ "(options: { arguments: TFunctionArguments; response: TFunctionResponse; onActionClick: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ChatActionClickHandler",
+ "text": "ChatActionClickHandler"
+ },
+ "; }) => React.ReactNode"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "returnComment": [],
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.RegisterRenderFunctionDefinition.$2.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "options",
+ "description": [],
+ "signature": [
+ "{ arguments: TArguments; response: TResponse; onActionClick: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ChatActionClickHandler",
+ "text": "ChatActionClickHandler"
+ },
+ "; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ]
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.RenderFunction",
+ "type": "Type",
+ "tags": [],
+ "label": "RenderFunction",
+ "description": [],
+ "signature": [
+ "(options: { arguments: TArguments; response: TResponse; onActionClick: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ChatActionClickHandler",
+ "text": "ChatActionClickHandler"
+ },
+ "; }) => React.ReactNode"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "returnComment": [],
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.RenderFunction.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "options",
+ "description": [],
+ "signature": [
+ "{ arguments: TArguments; response: TResponse; onActionClick: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ChatActionClickHandler",
+ "text": "ChatActionClickHandler"
+ },
+ "; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.TelemetryEventTypeWithPayload",
+ "type": "Type",
+ "tags": [],
+ "label": "TelemetryEventTypeWithPayload",
+ "description": [],
+ "signature": [
+ "{ type: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantTelemetryEventType",
+ "text": "ObservabilityAIAssistantTelemetryEventType"
+ },
+ ".ChatFeedback; payload: ",
+ "ChatFeedback",
+ "; } | { type: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantTelemetryEventType",
+ "text": "ObservabilityAIAssistantTelemetryEventType"
+ },
+ ".InsightFeedback; payload: ",
+ "InsightFeedback",
+ "; } | { type: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantTelemetryEventType",
+ "text": "ObservabilityAIAssistantTelemetryEventType"
+ },
+ ".UserSentPromptInChat; payload: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.VISUALIZE_ESQL_USER_INTENTIONS",
+ "type": "Array",
+ "tags": [],
+ "label": "VISUALIZE_ESQL_USER_INTENTIONS",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.VisualizeESQLUserIntention",
+ "text": "VisualizeESQLUserIntention"
+ },
+ "[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
}
],
"objects": [],
"setup": {
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.ObservabilityAIAssistantPluginSetup",
+ "id": "def-public.ObservabilityAIAssistantPublicSetup",
"type": "Interface",
"tags": [],
- "label": "ObservabilityAIAssistantPluginSetup",
+ "label": "ObservabilityAIAssistantPublicSetup",
"description": [],
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
"deprecated": false,
@@ -2753,10 +4419,10 @@
},
"start": {
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.ObservabilityAIAssistantPluginStart",
+ "id": "def-public.ObservabilityAIAssistantPublicStart",
"type": "Interface",
"tags": [],
- "label": "ObservabilityAIAssistantPluginStart",
+ "label": "ObservabilityAIAssistantPublicStart",
"description": [],
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
"deprecated": false,
@@ -2764,7 +4430,7 @@
"children": [
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.ObservabilityAIAssistantPluginStart.service",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.service",
"type": "Object",
"tags": [],
"label": "service",
@@ -2784,7 +4450,7 @@
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.ObservabilityAIAssistantPluginStart.ObservabilityAIAssistantContextualInsight",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.ObservabilityAIAssistantContextualInsight",
"type": "CompoundType",
"tags": [],
"label": "ObservabilityAIAssistantContextualInsight",
@@ -2800,21 +4466,37 @@
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.ObservabilityAIAssistantPluginStart.ObservabilityAIAssistantActionMenuItem",
- "type": "CompoundType",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.ObservabilityAIAssistantMultipaneFlyoutContext",
+ "type": "Object",
+ "tags": [],
+ "label": "ObservabilityAIAssistantMultipaneFlyoutContext",
+ "description": [],
+ "signature": [
+ "React.Context<",
+ "ChatFlyoutSecondSlotHandler",
+ " | undefined>"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.ObservabilityAIAssistantChatServiceContext",
+ "type": "Object",
"tags": [],
- "label": "ObservabilityAIAssistantActionMenuItem",
+ "label": "ObservabilityAIAssistantChatServiceContext",
"description": [],
"signature": [
- "React.ForwardRefExoticComponent & ",
+ "React.Context<",
{
- "pluginId": "@kbn/shared-ux-utility",
- "scope": "common",
- "docId": "kibKbnSharedUxUtilityPluginApi",
- "section": "def-common.WithSuspenseExtendedDeps",
- "text": "WithSuspenseExtendedDeps"
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantChatService",
+ "text": "ObservabilityAIAssistantChatService"
},
- ", \"key\" | \"css\" | \"analytics\"> & React.RefAttributes<{}>> | null"
+ " | undefined>"
],
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
"deprecated": false,
@@ -2822,7 +4504,30 @@
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.ObservabilityAIAssistantPluginStart.useGenAIConnectors",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.useObservabilityAIAssistantChatService",
+ "type": "Function",
+ "tags": [],
+ "label": "useObservabilityAIAssistantChatService",
+ "description": [],
+ "signature": [
+ "() => ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantChatService",
+ "text": "ObservabilityAIAssistantChatService"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "returnComment": [],
+ "children": []
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.useGenAIConnectors",
"type": "Function",
"tags": [],
"label": "useGenAIConnectors",
@@ -2839,7 +4544,95 @@
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-public.ObservabilityAIAssistantPluginStart.useUserPreferredLanguage",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.useChat",
+ "type": "Function",
+ "tags": [],
+ "label": "useChat",
+ "description": [],
+ "signature": [
+ "(props: ",
+ "UseChatProps",
+ ") => ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.UseChatResult",
+ "text": "UseChatResult"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "returnComment": [],
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.useChat.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "props",
+ "description": [],
+ "signature": [
+ "{ connectorId?: string | undefined; service: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantService",
+ "text": "ObservabilityAIAssistantService"
+ },
+ "; initialMessages: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]; initialConversationId?: string | undefined; chatService: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "public",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-public.ObservabilityAIAssistantChatService",
+ "text": "ObservabilityAIAssistantChatService"
+ },
+ "; persist: boolean; onConversationUpdate?: ((event: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ConversationCreateEvent",
+ "text": "ConversationCreateEvent"
+ },
+ " | ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ConversationUpdateEvent",
+ "text": "ConversationUpdateEvent"
+ },
+ ") => void) | undefined; onChatComplete?: ((messages: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]) => void) | undefined; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ]
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.useUserPreferredLanguage",
"type": "Function",
"tags": [],
"label": "useUserPreferredLanguage",
@@ -2850,7 +4643,67 @@
"path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
"deprecated": false,
"trackAdoption": false,
- "children": [],
+ "children": [],
+ "returnComment": []
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.getContextualInsightMessages",
+ "type": "Function",
+ "tags": [],
+ "label": "getContextualInsightMessages",
+ "description": [],
+ "signature": [
+ "({}: { message: string; instructions: string; }) => ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.getContextualInsightMessages.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "{}",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.getContextualInsightMessages.$1.message",
+ "type": "string",
+ "tags": [],
+ "label": "message",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-public.ObservabilityAIAssistantPublicStart.getContextualInsightMessages.$1.instructions",
+ "type": "string",
+ "tags": [],
+ "label": "instructions",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ]
+ }
+ ],
"returnComment": []
}
],
@@ -3113,7 +4966,13 @@
"; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ",
"ObservabilityAIAssistantRouteHandlerResources",
") => Promise<{ functionDefinitions: ",
- "FunctionDefinition",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.FunctionDefinition",
+ "text": "FunctionDefinition"
+ },
"<",
"CompatibleJSONSchema",
">[]; contextDefinitions: ",
@@ -3339,114 +5198,491 @@
"pluginId": "observabilityAIAssistant",
"scope": "common",
"docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-common.Message",
- "text": "Message"
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ ", unknown>>; connectorId: ",
+ "StringC",
+ "; functions: ",
+ "ArrayC",
+ "<",
+ "TypeC",
+ "<{ name: ",
+ "StringC",
+ "; description: ",
+ "StringC",
+ "; parameters: ",
+ "AnyC",
+ "; }>>; }>, ",
+ "PartialC",
+ "<{ functionCall: ",
+ "StringC",
+ "; }>]>; }> | undefined; handler: ({}: ",
+ "ObservabilityAIAssistantRouteHandlerResources",
+ " & { params: { body: { name: string; messages: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<",
+ "Readable",
+ ">; } & ",
+ "ObservabilityAIAssistantRouteCreateOptions",
+ "; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/get_global_observability_ai_assistant_route_repository.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-server.RegistrationCallback",
+ "type": "Type",
+ "tags": [],
+ "label": "RegistrationCallback",
+ "description": [],
+ "signature": [
+ "({}: { signal: AbortSignal; resources: ",
+ "RespondFunctionResources",
+ "; client: ",
+ "ObservabilityAIAssistantClient",
+ "; functions: ",
+ "ChatFunctionClient",
+ "; }) => Promise"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/service/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "returnComment": [],
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-server.RegistrationCallback.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "__0",
+ "description": [],
+ "signature": [
+ "{ signal: AbortSignal; resources: ",
+ "RespondFunctionResources",
+ "; client: ",
+ "ObservabilityAIAssistantClient",
+ "; functions: ",
+ "ChatFunctionClient",
+ "; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/service/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ }
+ ],
+ "objects": [],
+ "start": {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-server.ObservabilityAIAssistantServerStart",
+ "type": "Interface",
+ "tags": [],
+ "label": "ObservabilityAIAssistantServerStart",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-server.ObservabilityAIAssistantServerStart.service",
+ "type": "Object",
+ "tags": [],
+ "label": "service",
+ "description": [
+ "\nReturns a Observability AI Assistant service instance"
+ ],
+ "signature": [
+ "ObservabilityAIAssistantService"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "lifecycle": "start",
+ "initialIsOpen": true
+ },
+ "setup": {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-server.ObservabilityAIAssistantServerSetup",
+ "type": "Interface",
+ "tags": [],
+ "label": "ObservabilityAIAssistantServerSetup",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-server.ObservabilityAIAssistantServerSetup.service",
+ "type": "Object",
+ "tags": [],
+ "label": "service",
+ "description": [
+ "\nReturns a Observability AI Assistant service instance"
+ ],
+ "signature": [
+ "ObservabilityAIAssistantService"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "lifecycle": "setup",
+ "initialIsOpen": true
+ }
+ },
+ "common": {
+ "classes": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.ChatCompletionError",
+ "type": "Class",
+ "tags": [],
+ "label": "ChatCompletionError",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ChatCompletionError",
+ "text": "ChatCompletionError"
+ },
+ " extends Error"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.ChatCompletionError.Unnamed",
+ "type": "Function",
+ "tags": [],
+ "label": "Constructor",
+ "description": [],
+ "signature": [
+ "any"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.ChatCompletionError.Unnamed.$1",
+ "type": "Uncategorized",
+ "tags": [],
+ "label": "code",
+ "description": [],
+ "signature": [
+ "T"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.ChatCompletionError.Unnamed.$2",
+ "type": "string",
+ "tags": [],
+ "label": "message",
+ "description": [],
+ "signature": [
+ "string"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.ChatCompletionError.Unnamed.$3",
+ "type": "Uncategorized",
+ "tags": [],
+ "label": "meta",
+ "description": [],
+ "signature": [
+ "ErrorMetaAttributes[T] | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": false
+ }
+ ],
+ "returnComment": []
+ }
+ ],
+ "initialIsOpen": false
+ }
+ ],
+ "functions": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.createConversationNotFoundError",
+ "type": "Function",
+ "tags": [],
+ "label": "createConversationNotFoundError",
+ "description": [],
+ "signature": [
+ "() => ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ChatCompletionError",
+ "text": "ChatCompletionError"
+ },
+ "<",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ChatCompletionErrorCode",
+ "text": "ChatCompletionErrorCode"
+ },
+ ".NotFoundError>"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.createInternalServerError",
+ "type": "Function",
+ "tags": [],
+ "label": "createInternalServerError",
+ "description": [],
+ "signature": [
+ "(originalErrorMessage: string) => ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ChatCompletionError",
+ "text": "ChatCompletionError"
+ },
+ "<",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ChatCompletionErrorCode",
+ "text": "ChatCompletionErrorCode"
+ },
+ ".InternalError>"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.createInternalServerError.$1",
+ "type": "string",
+ "tags": [],
+ "label": "originalErrorMessage",
+ "description": [],
+ "signature": [
+ "string"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.createTokenLimitReachedError",
+ "type": "Function",
+ "tags": [],
+ "label": "createTokenLimitReachedError",
+ "description": [],
+ "signature": [
+ "(tokenLimit: number | undefined, tokenCount: number | undefined) => ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ChatCompletionError",
+ "text": "ChatCompletionError"
},
- ", unknown>>; connectorId: ",
- "StringC",
- "; functions: ",
- "ArrayC",
"<",
- "TypeC",
- "<{ name: ",
- "StringC",
- "; description: ",
- "StringC",
- "; parameters: ",
- "AnyC",
- "; }>>; }>, ",
- "PartialC",
- "<{ functionCall: ",
- "StringC",
- "; }>]>; }> | undefined; handler: ({}: ",
- "ObservabilityAIAssistantRouteHandlerResources",
- " & { params: { body: { name: string; messages: ",
{
"pluginId": "observabilityAIAssistant",
"scope": "common",
"docId": "kibObservabilityAIAssistantPluginApi",
- "section": "def-common.Message",
- "text": "Message"
+ "section": "def-common.ChatCompletionErrorCode",
+ "text": "ChatCompletionErrorCode"
},
- "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<",
- "Readable",
- ">; } & ",
- "ObservabilityAIAssistantRouteCreateOptions",
- "; }"
+ ".TokenLimitReachedError>"
],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/get_global_observability_ai_assistant_route_repository.ts",
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.createTokenLimitReachedError.$1",
+ "type": "number",
+ "tags": [],
+ "label": "tokenLimit",
+ "description": [],
+ "signature": [
+ "number | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.createTokenLimitReachedError.$2",
+ "type": "number",
+ "tags": [],
+ "label": "tokenCount",
+ "description": [],
+ "signature": [
+ "number | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": false
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.isChatCompletionError",
+ "type": "Function",
+ "tags": [],
+ "label": "isChatCompletionError",
+ "description": [],
+ "signature": [
+ "(error: Error) => boolean"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.isChatCompletionError.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "error",
+ "description": [],
+ "signature": [
+ "Error"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.isSupportedConnectorType",
+ "type": "Function",
+ "tags": [],
+ "label": "isSupportedConnectorType",
+ "description": [],
+ "signature": [
+ "(type: string) => boolean"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/connectors.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.isSupportedConnectorType.$1",
+ "type": "string",
+ "tags": [],
+ "label": "type",
+ "description": [],
+ "signature": [
+ "string"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/connectors.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.isTokenLimitReachedError",
+ "type": "Function",
+ "tags": [],
+ "label": "isTokenLimitReachedError",
+ "description": [],
+ "signature": [
+ "(error: Error) => boolean"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
"deprecated": false,
"trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.isTokenLimitReachedError.$1",
+ "type": "Object",
+ "tags": [],
+ "label": "error",
+ "description": [],
+ "signature": [
+ "Error"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": [],
"initialIsOpen": false
}
],
- "objects": [],
- "start": {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-server.ObservabilityAIAssistantPluginStart",
- "type": "Interface",
- "tags": [],
- "label": "ObservabilityAIAssistantPluginStart",
- "description": [],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts",
- "deprecated": false,
- "trackAdoption": false,
- "children": [
- {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-server.ObservabilityAIAssistantPluginStart.service",
- "type": "Object",
- "tags": [],
- "label": "service",
- "description": [
- "\nReturns a Observability AI Assistant service instance"
- ],
- "signature": [
- "ObservabilityAIAssistantService"
- ],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts",
- "deprecated": false,
- "trackAdoption": false
- }
- ],
- "lifecycle": "start",
- "initialIsOpen": true
- },
- "setup": {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-server.ObservabilityAIAssistantPluginSetup",
- "type": "Interface",
- "tags": [],
- "label": "ObservabilityAIAssistantPluginSetup",
- "description": [],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts",
- "deprecated": false,
- "trackAdoption": false,
- "children": [
- {
- "parentPluginId": "observabilityAIAssistant",
- "id": "def-server.ObservabilityAIAssistantPluginSetup.service",
- "type": "Object",
- "tags": [],
- "label": "service",
- "description": [
- "\nReturns a Observability AI Assistant service instance"
- ],
- "signature": [
- "ObservabilityAIAssistantService"
- ],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts",
- "deprecated": false,
- "trackAdoption": false
- }
- ],
- "lifecycle": "setup",
- "initialIsOpen": true
- }
- },
- "common": {
- "classes": [],
- "functions": [],
"interfaces": [
{
"parentPluginId": "observabilityAIAssistant",
@@ -3560,12 +5796,121 @@
},
{
"parentPluginId": "observabilityAIAssistant",
- "id": "def-common.Conversation.public",
- "type": "boolean",
+ "id": "def-common.Conversation.public",
+ "type": "boolean",
+ "tags": [],
+ "label": "public",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ }
+ ],
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.FunctionDefinition",
+ "type": "Interface",
+ "tags": [],
+ "label": "FunctionDefinition",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.FunctionDefinition",
+ "text": "FunctionDefinition"
+ },
+ ""
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.FunctionDefinition.name",
+ "type": "string",
+ "tags": [],
+ "label": "name",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.FunctionDefinition.description",
+ "type": "string",
+ "tags": [],
+ "label": "description",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.FunctionDefinition.visibility",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "visibility",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.FunctionVisibility",
+ "text": "FunctionVisibility"
+ },
+ " | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.FunctionDefinition.descriptionForUser",
+ "type": "string",
+ "tags": [],
+ "label": "descriptionForUser",
+ "description": [],
+ "signature": [
+ "string | undefined"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.FunctionDefinition.parameters",
+ "type": "Uncategorized",
+ "tags": [],
+ "label": "parameters",
+ "description": [],
+ "signature": [
+ "TParameters"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.FunctionDefinition.contexts",
+ "type": "Array",
"tags": [],
- "label": "public",
+ "label": "contexts",
"description": [],
- "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "signature": [
+ "string[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts",
"deprecated": false,
"trackAdoption": false
}
@@ -3773,6 +6118,30 @@
}
],
"enums": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.ChatCompletionErrorCode",
+ "type": "Enum",
+ "tags": [],
+ "label": "ChatCompletionErrorCode",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.FunctionVisibility",
+ "type": "Enum",
+ "tags": [],
+ "label": "FunctionVisibility",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/function_visibility.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
{
"parentPluginId": "observabilityAIAssistant",
"id": "def-common.KnowledgeBaseEntryRole",
@@ -3796,9 +6165,331 @@
"deprecated": false,
"trackAdoption": false,
"initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.StreamingChatResponseEventType",
+ "type": "Enum",
+ "tags": [],
+ "label": "StreamingChatResponseEventType",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.VisualizeESQLUserIntention",
+ "type": "Enum",
+ "tags": [],
+ "label": "VisualizeESQLUserIntention",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ }
+ ],
+ "misc": [
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.BufferFlushEvent",
+ "type": "Type",
+ "tags": [],
+ "label": "BufferFlushEvent",
+ "description": [],
+ "signature": [
+ "{ type: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.StreamingChatResponseEventType",
+ "text": "StreamingChatResponseEventType"
+ },
+ ".BufferFlush; } & { data?: string | undefined; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.ChatCompletionChunkEvent",
+ "type": "Type",
+ "tags": [],
+ "label": "ChatCompletionChunkEvent",
+ "description": [],
+ "signature": [
+ "{ type: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.StreamingChatResponseEventType",
+ "text": "StreamingChatResponseEventType"
+ },
+ ".ChatCompletionChunk; } & { id: string; message: { content?: string | undefined; function_call?: { name?: string | undefined; arguments?: string | undefined; } | undefined; }; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.ChatCompletionErrorEvent",
+ "type": "Type",
+ "tags": [],
+ "label": "ChatCompletionErrorEvent",
+ "description": [],
+ "signature": [
+ "{ type: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.StreamingChatResponseEventType",
+ "text": "StreamingChatResponseEventType"
+ },
+ ".ChatCompletionError; } & { error: { message: string; stack?: string | undefined; code?: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ChatCompletionErrorCode",
+ "text": "ChatCompletionErrorCode"
+ },
+ " | undefined; meta?: Record | undefined; }; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.ConversationCreateEvent",
+ "type": "Type",
+ "tags": [],
+ "label": "ConversationCreateEvent",
+ "description": [],
+ "signature": [
+ "{ type: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.StreamingChatResponseEventType",
+ "text": "StreamingChatResponseEventType"
+ },
+ ".ConversationCreate; } & { conversation: { id: string; title: string; last_updated: string; }; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.ConversationCreateRequest",
+ "type": "Type",
+ "tags": [],
+ "label": "ConversationCreateRequest",
+ "description": [],
+ "signature": [
+ "Omit<",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Conversation",
+ "text": "Conversation"
+ },
+ ", \"namespace\" | \"user\" | \"conversation\"> & { conversation: { title: string; }; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.ConversationUpdateEvent",
+ "type": "Type",
+ "tags": [],
+ "label": "ConversationUpdateEvent",
+ "description": [],
+ "signature": [
+ "{ type: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.StreamingChatResponseEventType",
+ "text": "StreamingChatResponseEventType"
+ },
+ ".ConversationUpdate; } & { conversation: { id: string; title: string; last_updated: string; }; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.MessageAddEvent",
+ "type": "Type",
+ "tags": [],
+ "label": "MessageAddEvent",
+ "description": [],
+ "signature": [
+ "{ type: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.StreamingChatResponseEventType",
+ "text": "StreamingChatResponseEventType"
+ },
+ ".MessageAdd; } & { message: ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.Message",
+ "text": "Message"
+ },
+ "; id: string; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.StreamingChatResponseEvent",
+ "type": "Type",
+ "tags": [],
+ "label": "StreamingChatResponseEvent",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ConversationCreateEvent",
+ "text": "ConversationCreateEvent"
+ },
+ " | ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ConversationUpdateEvent",
+ "text": "ConversationUpdateEvent"
+ },
+ " | ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ChatCompletionChunkEvent",
+ "text": "ChatCompletionChunkEvent"
+ },
+ " | ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.MessageAddEvent",
+ "text": "MessageAddEvent"
+ },
+ " | ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ChatCompletionErrorEvent",
+ "text": "ChatCompletionErrorEvent"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.StreamingChatResponseEventWithoutError",
+ "type": "Type",
+ "tags": [],
+ "label": "StreamingChatResponseEventWithoutError",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ConversationCreateEvent",
+ "text": "ConversationCreateEvent"
+ },
+ " | ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ConversationUpdateEvent",
+ "text": "ConversationUpdateEvent"
+ },
+ " | ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.ChatCompletionChunkEvent",
+ "text": "ChatCompletionChunkEvent"
+ },
+ " | ",
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.MessageAddEvent",
+ "text": "MessageAddEvent"
+ }
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
+ {
+ "parentPluginId": "observabilityAIAssistant",
+ "id": "def-common.VISUALIZE_ESQL_USER_INTENTIONS",
+ "type": "Array",
+ "tags": [],
+ "label": "VISUALIZE_ESQL_USER_INTENTIONS",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "observabilityAIAssistant",
+ "scope": "common",
+ "docId": "kibObservabilityAIAssistantPluginApi",
+ "section": "def-common.VisualizeESQLUserIntention",
+ "text": "VisualizeESQLUserIntention"
+ },
+ "[]"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
}
],
- "misc": [],
"objects": []
}
}
\ No newline at end of file
diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx
index 8f37b579ab86..741bef04efee 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant']
---
import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 79 | 0 | 77 | 14 |
+| 218 | 1 | 216 | 21 |
## Client
@@ -31,6 +31,9 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-
### Start
+### Functions
+
+
### Interfaces
@@ -53,9 +56,18 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-
## Common
+### Functions
+
+
+### Classes
+
+
### Interfaces
### Enums
+### Consts, variables and types
+
+
diff --git a/api_docs/observability_a_i_assistant_app.devdocs.json b/api_docs/observability_a_i_assistant_app.devdocs.json
new file mode 100644
index 000000000000..b03a7f23f96d
--- /dev/null
+++ b/api_docs/observability_a_i_assistant_app.devdocs.json
@@ -0,0 +1,55 @@
+{
+ "id": "observabilityAIAssistantApp",
+ "client": {
+ "classes": [],
+ "functions": [],
+ "interfaces": [],
+ "enums": [],
+ "misc": [],
+ "objects": []
+ },
+ "server": {
+ "classes": [],
+ "functions": [],
+ "interfaces": [],
+ "enums": [],
+ "misc": [],
+ "objects": [],
+ "start": {
+ "parentPluginId": "observabilityAIAssistantApp",
+ "id": "def-server.ObservabilityAIAssistantAppServerStart",
+ "type": "Interface",
+ "tags": [],
+ "label": "ObservabilityAIAssistantAppServerStart",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant_app/server/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "lifecycle": "start",
+ "initialIsOpen": true
+ },
+ "setup": {
+ "parentPluginId": "observabilityAIAssistantApp",
+ "id": "def-server.ObservabilityAIAssistantAppServerSetup",
+ "type": "Interface",
+ "tags": [],
+ "label": "ObservabilityAIAssistantAppServerSetup",
+ "description": [],
+ "path": "x-pack/plugins/observability_solution/observability_ai_assistant_app/server/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [],
+ "lifecycle": "setup",
+ "initialIsOpen": true
+ }
+ },
+ "common": {
+ "classes": [],
+ "functions": [],
+ "interfaces": [],
+ "enums": [],
+ "misc": [],
+ "objects": []
+ }
+}
\ No newline at end of file
diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx
new file mode 100644
index 000000000000..f8f0d7c926ba
--- /dev/null
+++ b/api_docs/observability_a_i_assistant_app.mdx
@@ -0,0 +1,33 @@
+---
+####
+#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system.
+#### Reach out in #docs-engineering for more info.
+####
+id: kibObservabilityAIAssistantAppPluginApi
+slug: /kibana-dev-docs/api/observabilityAIAssistantApp
+title: "observabilityAIAssistantApp"
+image: https://source.unsplash.com/400x175/?github
+description: API docs for the observabilityAIAssistantApp plugin
+date: 2024-03-12
+tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp']
+---
+import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json';
+
+
+
+Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) for questions regarding this plugin.
+
+**Code health stats**
+
+| Public API count | Any count | Items lacking comments | Missing exports |
+|-------------------|-----------|------------------------|-----------------|
+| 2 | 0 | 2 | 0 |
+
+## Server
+
+### Setup
+
+
+### Start
+
+
diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx
index 87553cebdcc9..824916fce199 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-03-11
+date: 2024-03-12
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 0a5f2a229c49..3d694bcd12b0 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding']
---
import observabilityOnboardingObj from './observability_onboarding.devdocs.json';
diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx
index 3aa6d03072e5..08ce1f91bb37 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared']
---
import observabilitySharedObj from './observability_shared.devdocs.json';
diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx
index 4610d8c020d0..0b56d481fbe0 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-03-11
+date: 2024-03-12
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 8359ff2628a2..316f4d367cb9 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-03-11
+date: 2024-03-12
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 6bb3d18acfc8..e49d50866340 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
@@ -15,19 +15,19 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| Count | Plugins or Packages with a
public API | Number of teams |
|--------------|----------|------------------------|
-| 753 | 645 | 40 |
+| 754 | 646 | 40 |
### Public API health stats
| API Count | Any Count | Missing comments | Missing exports |
|--------------|----------|-----------------|--------|
-| 45408 | 232 | 34331 | 1760 |
+| 45552 | 233 | 34475 | 1767 |
## Plugin Directory
| Plugin name | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports |
|--------------|----------------|-----------|--------------|----------|---------------|--------|
-| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 279 | 0 | 273 | 31 |
+| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 281 | 0 | 275 | 31 |
| | [@elastic/appex-sharedux @elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 2 | 0 | 2 | 0 |
| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 |
| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 |
@@ -108,7 +108,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 151 | 0 | 111 | 1 |
| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Image embeddable | 3 | 0 | 3 | 1 |
| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 0 |
-| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 225 | 0 | 220 | 3 |
+| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 224 | 0 | 219 | 3 |
| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin visualizes data from Filebeat and Metricbeat, and integrates with other Observability solutions | 37 | 0 | 34 | 6 |
| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 0 |
| inputControlVis | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Input Control visualization to Kibana | 0 | 0 | 0 | 0 |
@@ -129,7 +129,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 302 | 0 | 276 | 32 |
| logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 |
| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 45 | 0 | 45 | 7 |
-| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 261 | 0 | 260 | 28 |
+| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 264 | 0 | 263 | 28 |
| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 60 | 0 | 60 | 0 |
| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 104 | 8 | 104 | 6 |
| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 151 | 3 | 65 | 96 |
@@ -141,7 +141,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 3 | 0 |
| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 |
| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 651 | 2 | 642 | 17 |
-| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 79 | 0 | 77 | 14 |
+| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 218 | 1 | 216 | 21 |
+| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 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. | 21 | 0 | 21 | 1 |
| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 14 | 0 | 14 | 0 |
| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 330 | 1 | 325 | 20 |
@@ -166,7 +167,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [@elastic/kibana-reporting-services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 32 | 0 | 8 | 4 |
| searchprofiler | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 |
| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 404 | 0 | 198 | 2 |
-| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 194 | 0 | 124 | 37 |
+| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 193 | 0 | 123 | 37 |
| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | ESS customizations for Security Solution. | 6 | 0 | 6 | 0 |
| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 7 | 0 | 7 | 0 |
| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | The core Serverless plugin, providing APIs to Serverless Project plugins. | 21 | 0 | 20 | 0 |
diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx
index e10391498aed..e4304448d032 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-03-11
+date: 2024-03-12
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 879f85a1debf..0ce45dc9a3d1 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-03-11
+date: 2024-03-12
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 10fe2007dd25..0b3109442ae9 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-03-11
+date: 2024-03-12
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 3e9bf36aaae0..a9a17c4770b3 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-03-11
+date: 2024-03-12
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 7b4961213e89..d3fb67d9f241 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-03-11
+date: 2024-03-12
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 a010c4b0c52a..c2d11f5ad675 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-03-11
+date: 2024-03-12
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 c0f8910924eb..bf2a223b13f7 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-03-11
+date: 2024-03-12
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 194a9ded175e..d6221f636716 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-03-11
+date: 2024-03-12
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 b097791cfe17..3a95465e4922 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-03-11
+date: 2024-03-12
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 da44baad08ca..16085ee8780c 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-03-11
+date: 2024-03-12
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 935662dce8cf..130459ee5354 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-03-11
+date: 2024-03-12
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 53339bd6434e..45304fea4aed 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-03-11
+date: 2024-03-12
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 4cdfd34d7aab..9f4c86d994e6 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-03-11
+date: 2024-03-12
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 d41381dd9303..7e27b6ddce2e 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-03-11
+date: 2024-03-12
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 16888997cb1f..8fb927d60799 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-03-11
+date: 2024-03-12
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 037df9ed6605..c3ea29776efb 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-03-11
+date: 2024-03-12
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 22c65689f2ed..752e4038e2ef 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting']
---
import screenshottingObj from './screenshotting.devdocs.json';
diff --git a/api_docs/security.mdx b/api_docs/security.mdx
index 5ca564c999c5..d05ddca86443 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security']
---
import securityObj from './security.devdocs.json';
diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json
index aa516abe724b..71bb78f20ee8 100644
--- a/api_docs/security_solution.devdocs.json
+++ b/api_docs/security_solution.devdocs.json
@@ -1523,20 +1523,20 @@
},
{
"parentPluginId": "securitySolution",
- "id": "def-public.TimelineModel.filterManager",
- "type": "Object",
+ "id": "def-public.TimelineModel.filters",
+ "type": "Array",
"tags": [],
- "label": "filterManager",
+ "label": "filters",
"description": [],
"signature": [
{
- "pluginId": "data",
- "scope": "public",
- "docId": "kibDataQueryPluginApi",
- "section": "def-public.FilterManager",
- "text": "FilterManager"
+ "pluginId": "@kbn/es-query",
+ "scope": "common",
+ "docId": "kibKbnEsQueryPluginApi",
+ "section": "def-common.Filter",
+ "text": "Filter"
},
- " | undefined"
+ "[] | undefined"
],
"path": "x-pack/plugins/security_solution/public/timelines/store/model.ts",
"deprecated": false,
@@ -1738,27 +1738,6 @@
"deprecated": false,
"trackAdoption": false
},
- {
- "parentPluginId": "securitySolution",
- "id": "def-public.TimelineModel.filters",
- "type": "Array",
- "tags": [],
- "label": "filters",
- "description": [],
- "signature": [
- {
- "pluginId": "@kbn/es-query",
- "scope": "common",
- "docId": "kibKbnEsQueryPluginApi",
- "section": "def-common.Filter",
- "text": "Filter"
- },
- "[] | undefined"
- ],
- "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts",
- "deprecated": false,
- "trackAdoption": false
- },
{
"parentPluginId": "securitySolution",
"id": "def-public.TimelineModel.selectedEventIds",
diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx
index 07449514cc37..aac1b0869d43 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution']
---
import securitySolutionObj from './security_solution.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/secur
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 194 | 0 | 124 | 37 |
+| 193 | 0 | 123 | 37 |
## Client
diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx
index d0becbe7579e..2737c9df767e 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-03-11
+date: 2024-03-12
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 27356ae0b544..5fb3cc552eeb 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-03-11
+date: 2024-03-12
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 cb7b1de4d721..7fad6fc6a9bd 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-03-11
+date: 2024-03-12
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 21fb1380dfff..b2006cd7c804 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-03-11
+date: 2024-03-12
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 f3f9f7e2f0e3..40b57ed0dd0e 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-03-11
+date: 2024-03-12
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 30fe62f9fe2b..659fa602d1ec 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-03-11
+date: 2024-03-12
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 1aed490c4f08..57fa9fdbfe99 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share']
---
import shareObj from './share.devdocs.json';
diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx
index ca6640d1bbb2..02f6dba71e37 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-03-11
+date: 2024-03-12
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 5ffafff2b1ec..7f353f339c65 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-03-11
+date: 2024-03-12
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 4aa46a87e44d..f29199e5e7c5 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-03-11
+date: 2024-03-12
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 3b29aa0d0822..769ac262d0f2 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-03-11
+date: 2024-03-12
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 60215bd4c5d2..8bf8ea87a7c0 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-03-11
+date: 2024-03-12
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 6f4ca623d23d..3be6aa5decfa 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-03-11
+date: 2024-03-12
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 e2e2240b080f..d50b3c484bb6 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-03-11
+date: 2024-03-12
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 7fe70eef5680..2ed7b842fbac 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-03-11
+date: 2024-03-12
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 bc63419ece8c..5a15ede9e38b 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection']
---
import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json';
diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx
index c04ce98e16f3..cdc2f8cee7c2 100644
--- a/api_docs/text_based_languages.mdx
+++ b/api_docs/text_based_languages.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages
title: "textBasedLanguages"
image: https://source.unsplash.com/400x175/?github
description: API docs for the textBasedLanguages plugin
-date: 2024-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages']
---
import textBasedLanguagesObj from './text_based_languages.devdocs.json';
diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx
index c5a0e357d1c6..44f68231a56d 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-03-11
+date: 2024-03-12
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 5e5fe83ffd64..afa0ec344b98 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-03-11
+date: 2024-03-12
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 477529be5fab..5c6dedfc7733 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-03-11
+date: 2024-03-12
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 ffc9e7fea27b..68e82a70d843 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-03-11
+date: 2024-03-12
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 f6fc039c798b..219848617d28 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions']
---
import uiActionsObj from './ui_actions.devdocs.json';
diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx
index cdffb3b5460a..5d825355d684 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-03-11
+date: 2024-03-12
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 427d2d08a9bd..94102db03dc3 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-03-11
+date: 2024-03-12
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 2591bfc41be2..305b3307fbb3 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-03-11
+date: 2024-03-12
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 36d2def7b772..200320cb88ed 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-03-11
+date: 2024-03-12
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 78bea7bf6462..8e0d147bc77c 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-03-11
+date: 2024-03-12
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 e2025341d3f8..da5e8dcdca3e 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-03-11
+date: 2024-03-12
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 012936ec2cb2..534dce4fc122 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-03-11
+date: 2024-03-12
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 243b23b46c12..7c3afd604e78 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-03-11
+date: 2024-03-12
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 8016df740479..e376b7ec0fe8 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-03-11
+date: 2024-03-12
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 91cdba42d47d..39df91bdcfb3 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-03-11
+date: 2024-03-12
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 e8a120883c10..8aaa96c4c567 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-03-11
+date: 2024-03-12
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 35f140db94b7..472643cb5d59 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-03-11
+date: 2024-03-12
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 b6e33ccb9808..a2920d5a2131 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-03-11
+date: 2024-03-12
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 f6547e164e74..3af7c335388f 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-03-11
+date: 2024-03-12
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 c6223d5433b0..a58e835a5b02 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-03-11
+date: 2024-03-12
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 7a66240057fd..9dca8ab8067a 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-03-11
+date: 2024-03-12
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 016f13f6ea8b..abef621e9787 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-03-11
+date: 2024-03-12
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 50c9503d1ee4..5295a06295e6 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-03-11
+date: 2024-03-12
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 39cf12eb6af7..3e719e839f12 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-03-11
+date: 2024-03-12
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 e83174a7241c..26a7caf9c2cc 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-03-11
+date: 2024-03-12
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations']
---
import visualizationsObj from './visualizations.devdocs.json';
From 7e8ee65c63ad9810da51ca75d6dbd96e560bc7cf Mon Sep 17 00:00:00 2001
From: Jill Guyonnet
Date: Tue, 12 Mar 2024 08:03:36 +0000
Subject: [PATCH 041/100] [Fleet] Actions menu for Fleet agents has correct
agent count and bulk actions are correctly processed for all selected agents
(#177035)
## Summary
Closes https://github.com/elastic/kibana/issues/167269
Closes https://github.com/elastic/kibana/issues/171914
Closes https://github.com/elastic/kibana/issues/167241
Changes:
- Agent count in `Actions` menu includes all selectable agents across
all pages, including agents with inactive status.
- `Actions` menu items are enabled if at least one agent is selected, no
matter its status.
- Fix bug where managed agents could be accidentally selected in query
mode when changing filtering.
- Changing agent status or agent policy filtering while in bulk
selection mode sets selection mode back to manual. This is to avoid a
bad state where bulk selection mode is still enabled and more
(unselected) agents are listed.
- Fix the bulk selection query when some agents are excluded (managed
agent policies).
- Agent upgrades in bulk selection mode includes all selected agents,
including agents with inactive status.
- Agent policy reassign in bulk selection mode includes all selected
agents, including agents with inactive status.
### Steps for testing
Cf. screen recording below.
#### Setup
1. Enroll a Fleet Server with a managed agent policy (e.g. by making
sure the preconfigured agent policy for Fleet Server has `is_managed:
true`).
2. Create agent policy "Agent policy 1". In the agent policy settings,
set the inactivity timeout to a low value, e.g. 10 seconds.
3. Enroll 7 agents on agent policy "Agent policy 1" (e.g. with Horde).
Once they are enrolled, kill the agents: they will become inactive in
Fleet.
4. Create agent policy "Agent policy 2". Enroll 7 agents on it.
#### UI
1. In the Agents table, change the filtering to include inactive status.
You should see 15 agents: 7 Healthy, 7 Inactive, 1 (Healthy) Fleet
Server. The Fleet Server should not be manually selectable (managed
agent policy).
2. Select one inactive agent. In the Actions menu, the agent count
should be 1 and actions should be available. NB: the action to schedule
an upgrade requires Platinum license, so it may be disabled.
3. Manually select all agents: above the table, it should say `Showing
15 agents | 14 agents selected`. In the Actions menu, the agent count
should be 14 and actions should be available.
4. Change the number of rows per page to 5; select all agents on the
first page and then click `Select everything on all pages` (bulk
selection): above the table, it should say `Showing 15 agents | All
agents selected`. In the Actions menu, the agent count should be 14 and
actions should be available.
5. Go to page 2, where 2 Healthy and 3 Inactive agents should be listed.
Bulk select all agents again. Change the filtering to exclude inactive
status: there should be 3 remaining agents (2 Healthy and Fleet Server)
and Fleet Server should not be selected. Above the table, it should say
`Showing 8 agents | 2 agents selected`. In the Actions menu, the agent
count should be 2 and actions should be available.
6. Change the filtering to include inactive status again: you should see
2 selected Healthy agents and 3 unselected Inactive agents. Above the
table, it should say `Showing 15 agents | 2 agents selected`. In the
Actions menu, the agent count should be 2 and actions should be
available.
#### Bulk agent actions
1. Bulk select all 14 agents (7 Healthy, 7 Inactive) and, in the Actions
menu, click "Upgrade 14 agents". The upgrade should be kicked off for
all agents. In the Agents Activity flyout, you should be able to follow
the upgrades for the 14 agents.
2. Create a new agent policy "Agent policy 3". Bulk select all 14 agents
(7 Healthy, 7 Inactive). In the Actions menu, click "Assign to new
policy" and select "Agent policy 3". All 14 agents should be reassigned
to the new policy (NB: Inactive agents will get Offline status).
3. Bulk select all 14 agents (7 Healthy, 7 Inactive) and, in the Actions
menu, click "Unenroll 14 agents". All agents should be unrenrolled.
### Screen recording
The following recording shows the main UI fixes:
- Bulk selection with inactive agents gets correct agent count
- Changing the filtering in bulk selection mode changes to manual mode
- Managed policy agent cannot be selected
https://github.com/elastic/kibana/assets/23701614/e52b225c-2951-4729-8903-551fcc793068
### Checklist
- [ ]
[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
---------
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
.../fleet/common/types/rest_spec/agent.ts | 3 +
.../components/bulk_actions.test.tsx | 128 ++++--------------
.../components/bulk_actions.tsx | 39 ++----
.../components/search_and_filter_bar.test.tsx | 15 +-
.../components/search_and_filter_bar.tsx | 20 +--
.../hooks/use_fetch_agents_data.tsx | 17 +--
.../agent_list_page/hooks/use_update_tags.tsx | 8 +-
.../sections/agents/agent_list_page/index.tsx | 84 +++++++-----
.../utils/get_common_tags.test.ts | 8 +-
.../agent_list_page/utils/get_common_tags.ts | 8 +-
.../agent_reassign_policy_modal/index.tsx | 1 +
.../components/agent_upgrade_modal/index.tsx | 1 +
.../fleet/server/routes/agent/handlers.ts | 6 +-
.../fleet/server/routes/agent/index.ts | 4 +-
.../server/routes/agent/upgrade_handler.ts | 4 +-
.../fleet/server/types/rest_spec/agent.ts | 3 +
16 files changed, 133 insertions(+), 216 deletions(-)
diff --git a/x-pack/plugins/fleet/common/types/rest_spec/agent.ts b/x-pack/plugins/fleet/common/types/rest_spec/agent.ts
index edb3f7f0eefc..07553dbc21ac 100644
--- a/x-pack/plugins/fleet/common/types/rest_spec/agent.ts
+++ b/x-pack/plugins/fleet/common/types/rest_spec/agent.ts
@@ -114,6 +114,7 @@ export interface PostBulkAgentUpgradeRequest {
rollout_duration_seconds?: number;
start_time?: string;
force?: boolean;
+ includeInactive?: boolean;
};
}
@@ -147,6 +148,7 @@ export interface PostBulkAgentReassignRequest {
policy_id: string;
agents: string[] | string;
batchSize?: number;
+ includeInactive?: boolean;
};
}
@@ -185,6 +187,7 @@ export interface PostBulkUpdateAgentTagsRequest {
agents: string[] | string;
tagsToAdd?: string[];
tagsToRemove?: string[];
+ includeInactive?: boolean;
};
}
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx
index 5834c776a6dc..f9ec74f7ce12 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx
@@ -12,29 +12,29 @@ import { fireEvent, act } from '@testing-library/react';
import type { Agent } from '../../../../types';
import { createFleetTestRendererMock } from '../../../../../../mock';
+import type { LicenseService } from '../../../../services';
import { ExperimentalFeaturesService } from '../../../../services';
import { AgentReassignAgentPolicyModal } from '../../components/agent_reassign_policy_modal';
+import { useLicense } from '../../../../../../hooks/use_license';
+
import { AgentBulkActions } from './bulk_actions';
jest.mock('../../../../../../services/experimental_features');
const mockedExperimentalFeaturesService = jest.mocked(ExperimentalFeaturesService);
-jest.mock('../../../../hooks', () => ({
- ...jest.requireActual('../../../../hooks'),
-}));
+jest.mock('../../../../../../hooks/use_license');
+const mockedUseLicence = useLicense as jest.MockedFunction;
jest.mock('../../components/agent_reassign_policy_modal');
const defaultProps = {
- shownAgents: 10,
- inactiveShownAgents: 0,
+ nAgentsInTable: 10,
totalManagedAgentIds: [],
- inactiveManagedAgentIds: [],
selectionMode: 'manual',
currentQuery: '',
selectedAgents: [],
- visibleAgents: [],
+ agentsOnCurrentPage: [],
refreshAgents: () => undefined,
allTags: [],
agentPolicies: [],
@@ -43,50 +43,28 @@ const defaultProps = {
describe('AgentBulkActions', () => {
beforeAll(() => {
mockedExperimentalFeaturesService.get.mockReturnValue({
- diagnosticFileUploadEnabled: false,
+ diagnosticFileUploadEnabled: true,
} as any);
});
beforeEach(() => {
+ mockedUseLicence.mockReturnValue({
+ hasAtLeast: () => false,
+ } as unknown as LicenseService);
jest.mocked(AgentReassignAgentPolicyModal).mockReset();
jest.mocked(AgentReassignAgentPolicyModal).mockReturnValue(null);
});
function render(props: any) {
const renderer = createFleetTestRendererMock();
-
return renderer.render();
}
- describe('When in manual mode', () => {
- it('should show only disabled actions if no agents are active', async () => {
- const results = render({
- ...defaultProps,
- inactiveShownAgents: 10,
- selectedAgents: [{ id: 'agent1' }, { id: 'agent2' }] as Agent[],
- });
-
- const bulkActionsButton = results.getByTestId('agentBulkActionsButton');
- await act(async () => {
- fireEvent.click(bulkActionsButton);
- });
-
- expect(results.getByText('Add / remove tags').closest('button')!).toBeDisabled();
- expect(results.getByText('Assign to new policy').closest('button')!).toBeDisabled();
- expect(results.getByText('Unenroll 2 agents').closest('button')!).toBeDisabled();
- expect(results.getByText('Upgrade 2 agents').closest('button')!).toBeDisabled();
- expect(results.getByText('Schedule upgrade for 2 agents').closest('button')!).toBeDisabled();
- expect(results.queryByText('Request diagnostics for 2 agents')).toBeNull();
- expect(results.getByText('Restart upgrade 2 agents').closest('button')!).toBeDisabled();
- });
-
- it('should show available actions for 2 selected agents if they are active', async () => {
+ describe('When in manual selection mode', () => {
+ it('should show the available actions for the selected agents', async () => {
const results = render({
...defaultProps,
- selectedAgents: [
- { id: 'agent1', tags: ['oldTag'], active: true },
- { id: 'agent2', active: true },
- ] as Agent[],
+ selectedAgents: [{ id: 'agent1', tags: ['oldTag'] }, { id: 'agent2' }] as Agent[],
});
const bulkActionsButton = results.getByTestId('agentBulkActionsButton');
@@ -100,19 +78,19 @@ describe('AgentBulkActions', () => {
expect(results.getByText('Upgrade 2 agents').closest('button')!).toBeEnabled();
expect(results.getByText('Schedule upgrade for 2 agents').closest('button')!).toBeDisabled();
expect(results.getByText('Restart upgrade 2 agents').closest('button')!).toBeEnabled();
+ expect(
+ results.getByText('Request diagnostics for 2 agents').closest('button')!
+ ).toBeEnabled();
});
- it('should add actions if mockedExperimentalFeaturesService is enabled', async () => {
- mockedExperimentalFeaturesService.get.mockReturnValue({
- diagnosticFileUploadEnabled: true,
- } as any);
+ it('should allow scheduled upgrades if the license allows it', async () => {
+ mockedUseLicence.mockReturnValue({
+ hasAtLeast: () => true,
+ } as unknown as LicenseService);
const results = render({
...defaultProps,
- selectedAgents: [
- { id: 'agent1', tags: ['oldTag'], active: true },
- { id: 'agent2', active: true },
- ] as Agent[],
+ selectedAgents: [{ id: 'agent1', tags: ['oldTag'] }, { id: 'agent2' }] as Agent[],
});
const bulkActionsButton = results.getByTestId('agentBulkActionsButton');
@@ -120,18 +98,12 @@ describe('AgentBulkActions', () => {
fireEvent.click(bulkActionsButton);
});
- expect(
- results.getByText('Request diagnostics for 2 agents').closest('button')!
- ).toBeEnabled();
+ expect(results.getByText('Schedule upgrade for 2 agents').closest('button')!).toBeEnabled();
});
});
- describe('When in query mode', () => {
- mockedExperimentalFeaturesService.get.mockReturnValue({
- diagnosticFileUploadEnabled: true,
- } as any);
-
- it('should show correct actions for active agents when no managed policies exist', async () => {
+ describe('When in query selection mode', () => {
+ it('should show the available actions for all agents when no managed agents are listed', async () => {
const results = render({
...defaultProps,
selectionMode: 'query',
@@ -153,7 +125,7 @@ describe('AgentBulkActions', () => {
expect(results.getByText('Restart upgrade 10 agents').closest('button')!).toBeEnabled();
});
- it('should show correct actions for the active agents and exclude the managed agents from the count', async () => {
+ it('should show the available actions for all agents except managed agents', async () => {
const results = render({
...defaultProps,
totalManagedAgentIds: ['agentId1', 'agentId2'],
@@ -176,49 +148,7 @@ describe('AgentBulkActions', () => {
expect(results.getByText('Restart upgrade 8 agents').closest('button')!).toBeEnabled();
});
- it('should show correct actions also when there are inactive managed agents', async () => {
- const results = render({
- ...defaultProps,
- inactiveManagedAgentIds: ['agentId1', 'agentId2'],
- totalManagedAgentIds: ['agentId1', 'agentId2', 'agentId3'],
- selectionMode: 'query',
- });
-
- const bulkActionsButton = results.getByTestId('agentBulkActionsButton');
- await act(async () => {
- fireEvent.click(bulkActionsButton);
- });
-
- expect(results.getByText('Add / remove tags').closest('button')!).toBeEnabled();
- expect(results.getByText('Assign to new policy').closest('button')!).toBeEnabled();
- expect(results.getByText('Unenroll 9 agents').closest('button')!).toBeEnabled();
- expect(results.getByText('Upgrade 9 agents').closest('button')!).toBeEnabled();
- expect(results.getByText('Schedule upgrade for 9 agents').closest('button')!).toBeDisabled();
- expect(results.getByText('Restart upgrade 9 agents').closest('button')!).toBeEnabled();
- });
-
- it('should show disabled actions when only inactive agents are selected', async () => {
- const results = render({
- ...defaultProps,
- inactiveShownAgents: 10,
- selectedAgents: [{ id: 'agent1' }, { id: 'agent2' }] as Agent[],
- selectionMode: 'query',
- });
-
- const bulkActionsButton = results.getByTestId('agentBulkActionsButton');
- await act(async () => {
- fireEvent.click(bulkActionsButton);
- });
-
- expect(results.getByText('Add / remove tags').closest('button')!).toBeDisabled();
- expect(results.getByText('Assign to new policy').closest('button')!).toBeDisabled();
- expect(results.getByText('Unenroll 0 agents').closest('button')!).toBeDisabled();
- expect(results.getByText('Upgrade 0 agents').closest('button')!).toBeDisabled();
- expect(results.getByText('Schedule upgrade for 0 agents').closest('button')!).toBeDisabled();
- expect(results.getByText('Restart upgrade 0 agents').closest('button')!).toBeDisabled();
- });
-
- it('should generate a correct kuery to select agents', async () => {
+ it('should generate a correct kuery to select agents when no managed agents are listed', async () => {
const results = render({
...defaultProps,
selectionMode: 'query',
@@ -243,7 +173,7 @@ describe('AgentBulkActions', () => {
);
});
- it('should generate a correct kuery to select agents with managed agents too', async () => {
+ it('should generate a correct kuery that excludes managed agents', async () => {
const results = render({
...defaultProps,
totalManagedAgentIds: ['agentId1', 'agentId2'],
@@ -263,7 +193,7 @@ describe('AgentBulkActions', () => {
expect(jest.mocked(AgentReassignAgentPolicyModal)).toHaveBeenCalledWith(
expect.objectContaining({
- agents: '(Base query) AND NOT (fleet-agents.agent.id : ("agentId1" or "agentId2"))',
+ agents: '((Base query)) AND NOT (fleet-agents.agent.id : ("agentId1" or "agentId2"))',
}),
expect.anything()
);
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx
index 3871473d40ba..cde9c8960e47 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx
@@ -35,28 +35,24 @@ import type { SelectionMode } from './types';
import { TagsAddRemove } from './tags_add_remove';
export interface Props {
- shownAgents: number;
- inactiveShownAgents: number;
+ nAgentsInTable: number;
totalManagedAgentIds: string[];
- inactiveManagedAgentIds: string[];
selectionMode: SelectionMode;
currentQuery: string;
selectedAgents: Agent[];
- visibleAgents: Agent[];
+ agentsOnCurrentPage: Agent[];
refreshAgents: (args?: { refreshTags?: boolean }) => void;
allTags: string[];
agentPolicies: AgentPolicy[];
}
export const AgentBulkActions: React.FunctionComponent = ({
- shownAgents,
- inactiveShownAgents,
+ nAgentsInTable,
totalManagedAgentIds,
- inactiveManagedAgentIds,
selectionMode,
currentQuery,
selectedAgents,
- visibleAgents,
+ agentsOnCurrentPage,
refreshAgents,
allTags,
agentPolicies,
@@ -87,26 +83,17 @@ export const AgentBulkActions: React.FunctionComponent = ({
const excludedKuery = `${AGENTS_PREFIX}.agent.id : (${totalManagedAgentIds
.map((id) => `"${id}"`)
.join(' or ')})`;
- return `${currentQuery} AND NOT (${excludedKuery})`;
+ return `(${currentQuery}) AND NOT (${excludedKuery})`;
} else {
return currentQuery;
}
}, [currentQuery, totalManagedAgentIds]);
- const totalActiveAgents = shownAgents - inactiveShownAgents;
-
- // exclude inactive agents from the count
+ const agents = selectionMode === 'manual' ? selectedAgents : selectionQuery;
const agentCount =
selectionMode === 'manual'
? selectedAgents.length
- : totalActiveAgents - (totalManagedAgentIds?.length - inactiveManagedAgentIds?.length);
-
- // Check if user is working with only inactive agents
- const atLeastOneActiveAgentSelected =
- selectionMode === 'manual'
- ? !!selectedAgents.find((agent) => agent.active)
- : shownAgents > inactiveShownAgents;
- const agents = selectionMode === 'manual' ? selectedAgents : selectionQuery;
+ : nAgentsInTable - totalManagedAgentIds?.length;
const [tagsPopoverButton, setTagsPopoverButton] = useState();
const { diagnosticFileUploadEnabled } = ExperimentalFeaturesService.get();
@@ -121,7 +108,6 @@ export const AgentBulkActions: React.FunctionComponent = ({
/>
),
icon: ,
- disabled: !atLeastOneActiveAgentSelected,
onClick: (event: any) => {
setTagsPopoverButton((event.target as Element).closest('button')!);
setIsTagAddVisible(!isTagAddVisible);
@@ -136,7 +122,6 @@ export const AgentBulkActions: React.FunctionComponent = ({
/>
),
icon: ,
- disabled: !atLeastOneActiveAgentSelected,
onClick: () => {
closeMenu();
setIsReassignFlyoutOpen(true);
@@ -154,7 +139,6 @@ export const AgentBulkActions: React.FunctionComponent = ({
/>
),
icon: ,
- disabled: !atLeastOneActiveAgentSelected,
onClick: () => {
closeMenu();
setIsUnenrollModalOpen(true);
@@ -172,7 +156,6 @@ export const AgentBulkActions: React.FunctionComponent = ({
/>
),
icon: ,
- disabled: !atLeastOneActiveAgentSelected,
onClick: () => {
closeMenu();
setUpgradeModalState({ isOpen: true, isScheduled: false, isUpdating: false });
@@ -190,7 +173,7 @@ export const AgentBulkActions: React.FunctionComponent = ({
/>
),
icon: ,
- disabled: !atLeastOneActiveAgentSelected || !isLicenceAllowingScheduleUpgrade,
+ disabled: !isLicenceAllowingScheduleUpgrade,
onClick: () => {
closeMenu();
setUpgradeModalState({ isOpen: true, isScheduled: true, isUpdating: false });
@@ -210,7 +193,6 @@ export const AgentBulkActions: React.FunctionComponent = ({
/>
),
icon: ,
- disabled: !atLeastOneActiveAgentSelected,
onClick: () => {
closeMenu();
setUpgradeModalState({ isOpen: true, isScheduled: false, isUpdating: true });
@@ -230,7 +212,6 @@ export const AgentBulkActions: React.FunctionComponent = ({
/>
),
icon: ,
- disabled: !atLeastOneActiveAgentSelected,
onClick: () => {
closeMenu();
setIsRequestDiagnosticsModalOpen(true);
@@ -246,8 +227,8 @@ export const AgentBulkActions: React.FunctionComponent = ({
];
const getSelectedTagsFromAgents = useMemo(
- () => getCommonTags(agents, visibleAgents ?? [], agentPolicies),
- [agents, visibleAgents, agentPolicies]
+ () => getCommonTags(agents, agentsOnCurrentPage ?? [], agentPolicies),
+ [agents, agentsOnCurrentPage, agentPolicies]
);
return (
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.test.tsx
index 07ba1a340240..e7229199995e 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.test.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.test.tsx
@@ -45,15 +45,14 @@ describe('SearchAndFilterBar', () => {
it('should show no Actions button when no agent is selected', async () => {
const selectedAgents: Agent[] = [];
const props: any = {
- shownAgents: 10,
- inactiveShownAgents: 0,
+ nAgentsInTable: 10,
totalInactiveAgents: 2,
totalManagedAgentIds: [],
selectionMode: 'manual',
currentQuery: '',
selectedAgents,
refreshAgents: () => undefined,
- visibleAgents: [],
+ agentsOnCurrentPage: [],
tags: [],
agentPolicies: [],
selectedStatus: [],
@@ -79,15 +78,14 @@ describe('SearchAndFilterBar', () => {
},
];
const props: any = {
- shownAgents: 10,
- inactiveShownAgents: 0,
+ nAgentsInTable: 10,
totalInactiveAgents: 2,
totalManagedAgentIds: [],
selectionMode: 'manual',
currentQuery: '',
selectedAgents,
refreshAgents: () => undefined,
- visibleAgents: [],
+ agentsOnCurrentPage: [],
tags: [],
agentPolicies: [],
selectedStatus: [],
@@ -101,15 +99,14 @@ describe('SearchAndFilterBar', () => {
it('should show an Actions button when agents selected in query mode', async () => {
const props: any = {
- shownAgents: 10,
- inactiveShownAgents: 0,
+ nAgentsInTable: 10,
totalInactiveAgents: 2,
totalManagedAgentIds: [],
selectionMode: 'query',
currentQuery: '',
selectedAgents: [],
refreshAgents: () => undefined,
- visibleAgents: [],
+ agentsOnCurrentPage: [],
tags: [],
agentPolicies: [],
selectedStatus: [],
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx
index 3dab659e6423..1fd8d0930e9f 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx
@@ -46,18 +46,16 @@ export interface SearchAndFilterBarProps {
tags: string[];
selectedTags: string[];
onSelectedTagsChange: (selectedTags: string[]) => void;
- shownAgents: number;
- inactiveShownAgents: number;
+ nAgentsInTable: number;
totalInactiveAgents: number;
totalManagedAgentIds: string[];
- inactiveManagedAgentIds: string[];
selectionMode: SelectionMode;
currentQuery: string;
selectedAgents: Agent[];
refreshAgents: (args?: { refreshTags?: boolean }) => void;
onClickAddAgent: () => void;
onClickAddFleetServer: () => void;
- visibleAgents: Agent[];
+ agentsOnCurrentPage: Agent[];
onClickAgentActivity: () => void;
showAgentActivityTour: { isOpen: boolean };
}
@@ -76,18 +74,16 @@ export const SearchAndFilterBar: React.FunctionComponent {
@@ -198,17 +194,15 @@ export const SearchAndFilterBar: React.FunctionComponent
{(selectionMode === 'manual' && selectedAgents.length) ||
- (selectionMode === 'query' && shownAgents > 0) ? (
+ (selectionMode === 'query' && nAgentsInTable > 0) ? (
();
const [allTags, setAllTags] = useState();
const [isLoading, setIsLoading] = useState(false);
- const [shownAgents, setShownAgents] = useState(0);
- const [inactiveShownAgents, setInactiveShownAgents] = useState(0);
+ const [nAgentsInTable, setNAgentsInTable] = useState(0);
const [totalInactiveAgents, setTotalInactiveAgents] = useState(0);
const [totalManagedAgentIds, setTotalManagedAgentIds] = useState([]);
- const [inactiveManagedAgentIds, setinactiveManagedAgentIds] = useState([]);
const [managedAgentsOnCurrentPage, setManagedAgentsOnCurrentPage] = useState(0);
const getSortFieldForAPI = (field: keyof Agent): string => {
@@ -201,11 +199,8 @@ export function useFetchAgentsData() {
}
setAgentsOnCurrentPage(agentsResponse.data.items);
- setShownAgents(agentsResponse.data.total);
+ setNAgentsInTable(agentsResponse.data.total);
setTotalInactiveAgents(totalInactiveAgentsResponse.data.results.inactive || 0);
- setInactiveShownAgents(
- showInactive ? totalInactiveAgentsResponse.data.results.inactive || 0 : 0
- );
const managedAgentPolicies = managedAgentPoliciesResponse.data?.items ?? [];
@@ -227,11 +222,7 @@ export function useFetchAgentsData() {
}
const allManagedAgents = response.data?.items ?? [];
const allManagedAgentIds = allManagedAgents?.map((agent) => agent.id);
- const inactiveManagedIds = allManagedAgents
- ?.filter((agent) => agent.status === 'inactive')
- .map((agent) => agent.id);
setTotalManagedAgentIds(allManagedAgentIds);
- setinactiveManagedAgentIds(inactiveManagedIds);
setManagedAgentsOnCurrentPage(
agentsResponse.data.items
@@ -298,11 +289,9 @@ export function useFetchAgentsData() {
agentsOnCurrentPage,
agentsStatus,
isLoading,
- shownAgents,
- inactiveShownAgents,
+ nAgentsInTable,
totalInactiveAgents,
totalManagedAgentIds,
- inactiveManagedAgentIds,
managedAgentsOnCurrentPage,
showUpgradeable,
setShowUpgradeable,
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_update_tags.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_update_tags.tsx
index 96e619db12f0..5b3c3334be0f 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_update_tags.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_update_tags.tsx
@@ -79,7 +79,13 @@ export const useUpdateTags = () => {
errorMessage?: string
) => {
await wrapRequest(
- async () => await sendPostBulkAgentTagsUpdate({ agents, tagsToAdd, tagsToRemove }),
+ async () =>
+ await sendPostBulkAgentTagsUpdate({
+ agents,
+ tagsToAdd,
+ tagsToRemove,
+ includeInactive: true,
+ }),
onSuccess,
successMessage,
errorMessage
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx
index afa26547fecc..6af126747bd9 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx
@@ -49,16 +49,39 @@ export const AgentListPage: React.FunctionComponent<{}> = () => {
const [selectedAgents, setSelectedAgents] = useState([]);
const [selectionMode, setSelectionMode] = useState('manual');
+ // Agent enrollment flyout state
+ const [enrollmentFlyout, setEnrollmentFlyoutState] = useState<{
+ isOpen: boolean;
+ selectedPolicyId?: string;
+ }>({
+ isOpen: false,
+ });
+ const [isAgentActivityFlyoutOpen, setAgentActivityFlyoutOpen] = useState(false);
+ const flyoutContext = useFlyoutContext();
+
+ // Agent actions states
+ const [agentToReassign, setAgentToReassign] = useState(undefined);
+ const [agentToUnenroll, setAgentToUnenroll] = useState(undefined);
+ const [agentToGetUninstallCommand, setAgentToGetUninstallCommand] = useState(
+ undefined
+ );
+ const [agentToUpgrade, setAgentToUpgrade] = useState(undefined);
+ const [agentToAddRemoveTags, setAgentToAddRemoveTags] = useState(undefined);
+ const [tagsPopoverButton, setTagsPopoverButton] = useState();
+ const [showTagsAddRemove, setShowTagsAddRemove] = useState(false);
+ const [agentToRequestDiagnostics, setAgentToRequestDiagnostics] = useState(
+ undefined
+ );
+ const [showAgentActivityTour, setShowAgentActivityTour] = useState({ isOpen: false });
+
const {
allTags,
agentsOnCurrentPage,
agentsStatus,
isLoading,
- shownAgents,
- inactiveShownAgents,
+ nAgentsInTable,
totalInactiveAgents,
totalManagedAgentIds,
- inactiveManagedAgentIds,
managedAgentsOnCurrentPage,
showUpgradeable,
setShowUpgradeable,
@@ -122,31 +145,6 @@ export const AgentListPage: React.FunctionComponent<{}> = () => {
setShowUpgradeable,
]);
- // Agent enrollment flyout state
- const [enrollmentFlyout, setEnrollmentFlyoutState] = useState<{
- isOpen: boolean;
- selectedPolicyId?: string;
- }>({
- isOpen: false,
- });
- const [isAgentActivityFlyoutOpen, setAgentActivityFlyoutOpen] = useState(false);
- const flyoutContext = useFlyoutContext();
-
- // Agent actions states
- const [agentToReassign, setAgentToReassign] = useState(undefined);
- const [agentToUnenroll, setAgentToUnenroll] = useState(undefined);
- const [agentToGetUninstallCommand, setAgentToGetUninstallCommand] = useState(
- undefined
- );
- const [agentToUpgrade, setAgentToUpgrade] = useState(undefined);
- const [agentToAddRemoveTags, setAgentToAddRemoveTags] = useState(undefined);
- const [tagsPopoverButton, setTagsPopoverButton] = useState();
- const [showTagsAddRemove, setShowTagsAddRemove] = useState(false);
- const [agentToRequestDiagnostics, setAgentToRequestDiagnostics] = useState(
- undefined
- );
- const [showAgentActivityTour, setShowAgentActivityTour] = useState({ isOpen: false });
-
const onTableChange = ({
page,
sort,
@@ -213,7 +211,7 @@ export const AgentListPage: React.FunctionComponent<{}> = () => {
differenceBy(selectedAgents, agentsOnCurrentPage, 'id').length === 0;
if (!areSelectedAgentsStillVisible) {
// force selecting all agents on current page if staying in query mode
- return setSelectedAgents(agentsOnCurrentPage);
+ return setSelectedAgents(agentsOnCurrentPage.filter((agent) => isAgentSelectable(agent)));
} else {
setSelectionMode('manual');
}
@@ -221,6 +219,20 @@ export const AgentListPage: React.FunctionComponent<{}> = () => {
setSelectedAgents(newAgents);
};
+ const onSelectedStatusChange = (status: string[]) => {
+ if (selectionMode === 'query') {
+ setSelectionMode('manual');
+ }
+ setSelectedStatus(status);
+ };
+
+ const onSelectedAgentPoliciesChange = (policies: string[]) => {
+ if (selectionMode === 'query') {
+ setSelectionMode('manual');
+ }
+ setSelectedAgentPolicies(policies);
+ };
+
const agentToUnenrollHasFleetServer = useMemo(() => {
if (!agentToUnenroll || !agentToUnenroll.policy_id) {
return false;
@@ -390,26 +402,24 @@ export const AgentListPage: React.FunctionComponent<{}> = () => {
onDraftKueryChange={setDraftKuery}
onSubmitSearch={onSubmitSearch}
selectedAgentPolicies={selectedAgentPolicies}
- onSelectedAgentPoliciesChange={setSelectedAgentPolicies}
+ onSelectedAgentPoliciesChange={onSelectedAgentPoliciesChange}
selectedStatus={selectedStatus}
- onSelectedStatusChange={setSelectedStatus}
+ onSelectedStatusChange={onSelectedStatusChange}
showUpgradeable={showUpgradeable}
onShowUpgradeableChange={setShowUpgradeable}
tags={allTags ?? []}
selectedTags={selectedTags}
onSelectedTagsChange={setSelectedTags}
- shownAgents={shownAgents}
- inactiveShownAgents={inactiveShownAgents}
+ nAgentsInTable={nAgentsInTable}
totalInactiveAgents={totalInactiveAgents}
totalManagedAgentIds={totalManagedAgentIds}
- inactiveManagedAgentIds={inactiveManagedAgentIds}
selectionMode={selectionMode}
currentQuery={kuery}
selectedAgents={selectedAgents}
refreshAgents={refreshAgents}
onClickAddAgent={() => setEnrollmentFlyoutState({ isOpen: true })}
onClickAddFleetServer={onClickAddFleetServer}
- visibleAgents={agentsOnCurrentPage}
+ agentsOnCurrentPage={agentsOnCurrentPage}
onClickAgentActivity={onClickAgentActivity}
showAgentActivityTour={showAgentActivityTour}
/>
@@ -417,7 +427,7 @@ export const AgentListPage: React.FunctionComponent<{}> = () => {
{/* Agent total, bulk actions and status bar */}
= () => {
showUpgradeable={showUpgradeable}
onTableChange={onTableChange}
pagination={pagination}
- totalAgents={Math.min(shownAgents, SO_SEARCH_LIMIT)}
+ totalAgents={Math.min(nAgentsInTable, SO_SEARCH_LIMIT)}
isUsingFilter={isUsingFilter}
setEnrollmentFlyoutState={setEnrollmentFlyoutState}
clearFilters={clearFilters}
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.test.ts b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.test.ts
index 9e2911ead130..82c5c2fd2cf1 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.test.ts
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.test.ts
@@ -10,7 +10,7 @@ import type { Agent, AgentPolicy } from '../../../../types';
import { getCommonTags } from './get_common_tags';
describe('getCommonTags', () => {
- it('should return common tags from visibleAgents if agents is empty string', () => {
+ it('should return common tags from agentsOnCurrentPage if agents is empty string', () => {
const result = getCommonTags(
'',
[{ tags: ['tag1'] }, { tags: ['tag1', 'tag2'] }] as Agent[],
@@ -20,7 +20,7 @@ describe('getCommonTags', () => {
expect(result).toEqual(['tag1']);
});
- it('should return common tags from visibleAgents if agents is query', () => {
+ it('should return common tags from agentsOnCurrentPage if agents is query', () => {
const result = getCommonTags(
'query',
[{ tags: ['tag1'] }, { tags: ['tag1', 'tag2'] }] as Agent[],
@@ -30,7 +30,7 @@ describe('getCommonTags', () => {
expect(result).toEqual(['tag1']);
});
- it('should return empty common tags if visibleAgents is empty', () => {
+ it('should return empty common tags if agentsOnCurrentPage is empty', () => {
const result = getCommonTags('', [], []);
expect(result).toEqual([]);
@@ -52,7 +52,7 @@ describe('getCommonTags', () => {
expect(result).toEqual(['oldTag', 'tag1']);
});
- it('should return common tags from old data if visibleAgents empty', () => {
+ it('should return common tags from old data if agentsOnCurrentPage empty', () => {
const result = getCommonTags(
[
{ id: 'agent1', tags: ['oldTag'] },
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.ts b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.ts
index 8b638129d2d7..c75042b0429f 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.ts
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.ts
@@ -11,7 +11,7 @@ import type { Agent, AgentPolicy } from '../../../../types';
export const getCommonTags = (
agents: string | Agent[],
- visibleAgents: Agent[],
+ agentsOnCurrentPage: Agent[],
agentPolicies: AgentPolicy[]
): string[] => {
const isManagedPolicy = (agent: Agent): boolean => {
@@ -33,12 +33,12 @@ export const getCommonTags = (
if (!Array.isArray(agents)) {
// in query mode, returning common tags of all agents in current page
// this is a simplification to avoid querying all agents from backend to determine common tags
- return commonSelectedTags(visibleAgents);
+ return commonSelectedTags(agentsOnCurrentPage);
}
// taking latest tags from freshly loaded agents data, as selected agents array does not contain the latest tags of agents
const freshSelectedAgentsData =
- visibleAgents.length > 0
- ? visibleAgents.filter((newAgent) =>
+ agentsOnCurrentPage.length > 0
+ ? agentsOnCurrentPage.filter((newAgent) =>
agents.find((existingAgent) => existingAgent.id === newAgent.id)
)
: agents;
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx
index 5fd6183863fb..189f6d4455f8 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx
@@ -77,6 +77,7 @@ export const AgentReassignAgentPolicyModal: React.FunctionComponent = ({
: await sendPostBulkAgentReassign({
policy_id: selectedAgentPolicyId,
agents: Array.isArray(agents) ? agents.map((agent) => agent.id) : agents,
+ includeInactive: true,
});
if (res.error) {
throw res.error;
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx
index 9b3af9f1c29e..74bd3fe35d30 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx
@@ -318,6 +318,7 @@ export const AgentUpgradeAgentModal: React.FunctionComponent
@@ -283,7 +283,7 @@ export const postBulkAgentsReassignHandler: RequestHandler<
const esClient = coreContext.elasticsearch.client.asInternalUser;
const agentOptions = Array.isArray(request.body.agents)
? { agentIds: request.body.agents }
- : { kuery: request.body.agents };
+ : { kuery: request.body.agents, showInactive: request.body.includeInactive };
try {
const results = await AgentService.reassignAgents(
diff --git a/x-pack/plugins/fleet/server/routes/agent/index.ts b/x-pack/plugins/fleet/server/routes/agent/index.ts
index ca37cc76c338..9625b53a0867 100644
--- a/x-pack/plugins/fleet/server/routes/agent/index.ts
+++ b/x-pack/plugins/fleet/server/routes/agent/index.ts
@@ -50,7 +50,7 @@ import {
deleteAgentHandler,
getAgentStatusForAgentPolicyHandler,
putAgentsReassignHandlerDeprecated,
- postBulkAgentsReassignHandler,
+ postBulkAgentReassignHandler,
getAgentDataHandler,
bulkUpdateAgentTagsHandler,
getAvailableVersionsHandler,
@@ -440,7 +440,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT
version: API_VERSIONS.public.v1,
validate: { request: PostBulkAgentReassignRequestSchema },
},
- postBulkAgentsReassignHandler
+ postBulkAgentReassignHandler
);
// Bulk unenroll
diff --git a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts
index f46cdc96cd7c..4e4e8d1f367c 100644
--- a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts
+++ b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts
@@ -172,7 +172,9 @@ export const postBulkAgentsUpgradeHandler: RequestHandler<
}
try {
- const agentOptions = Array.isArray(agents) ? { agentIds: agents } : { kuery: agents };
+ const agentOptions = Array.isArray(agents)
+ ? { agentIds: agents }
+ : { kuery: agents, showInactive: request.body.includeInactive };
const upgradeOptions = {
...agentOptions,
sourceUri,
diff --git a/x-pack/plugins/fleet/server/types/rest_spec/agent.ts b/x-pack/plugins/fleet/server/types/rest_spec/agent.ts
index 882530f372f8..456463561f0b 100644
--- a/x-pack/plugins/fleet/server/types/rest_spec/agent.ts
+++ b/x-pack/plugins/fleet/server/types/rest_spec/agent.ts
@@ -137,6 +137,7 @@ export const PostBulkAgentUpgradeRequestSchema = {
})
),
batchSize: schema.maybe(schema.number()),
+ includeInactive: schema.boolean({ defaultValue: false }),
}),
};
@@ -189,6 +190,7 @@ export const PostBulkAgentReassignRequestSchema = {
policy_id: schema.string(),
agents: schema.oneOf([schema.arrayOf(schema.string()), schema.string()]),
batchSize: schema.maybe(schema.number()),
+ includeInactive: schema.boolean({ defaultValue: false }),
}),
};
@@ -214,6 +216,7 @@ export const PostBulkUpdateAgentTagsRequestSchema = {
tagsToAdd: schema.maybe(schema.arrayOf(schema.string())),
tagsToRemove: schema.maybe(schema.arrayOf(schema.string())),
batchSize: schema.maybe(schema.number()),
+ includeInactive: schema.boolean({ defaultValue: false }),
}),
};
From 004a160591640cb1c3162cf1decdce22d80272e3 Mon Sep 17 00:00:00 2001
From: Alexey Antonov
Date: Tue, 12 Mar 2024 11:22:20 +0200
Subject: [PATCH 042/100] fix: [Rules > Add Elastic rules][SCREEN READER]:
Install rule (per row) should have a more explicit accessible label (#178116)
Closes: https://github.com/elastic/security-team/issues/8656
## Description
The Add Elastic Rules table has an "Install all" button that should
include an accessible label to answer the question Install all what? for
assistive technologies. Screenshot and code snippet below.
### Steps to recreate
1. Open [Add Elastic
rules](https://kibana.siem.estc.dev/app/security/rules/add_rules)
2. Tab to the Install all button, using the `TAB` key to avoid hearing
headings or other contextual information
### Solution
'aria-label' attribute was updated
### Screen
---------
Co-authored-by: Maxim Palenov
---
.../use_add_prebuilt_rules_table_columns.tsx | 3 ++-
.../pages/detection_engine/rules/translations.ts | 8 ++++++++
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/use_add_prebuilt_rules_table_columns.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/use_add_prebuilt_rules_table_columns.tsx
index c5f04a178935..25f605772e94 100644
--- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/use_add_prebuilt_rules_table_columns.tsx
+++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/use_add_prebuilt_rules_table_columns.tsx
@@ -112,7 +112,7 @@ const createInstallButtonColumn = (
): TableColumn => ({
field: 'rule_id',
name: '',
- render: (ruleId: RuleSignatureId) => {
+ render: (ruleId: RuleSignatureId, record: Rule) => {
const isRuleInstalling = loadingRules.includes(ruleId);
const isInstallButtonDisabled = isRuleInstalling || isDisabled;
return (
@@ -121,6 +121,7 @@ const createInstallButtonColumn = (
disabled={isInstallButtonDisabled}
onClick={() => installOneRule(ruleId)}
data-test-subj={`installSinglePrebuiltRuleButton-${ruleId}`}
+ aria-label={i18n.INSTALL_RULE_BUTTON_ARIA_LABEL(record.name)}
>
{isRuleInstalling ? (
+ i18n.translate('xpack.securitySolution.addRules.installRuleButton.ariaLabel', {
+ defaultMessage: 'Install "{ruleName}"',
+ values: {
+ ruleName,
+ },
+ });
+
export const UPDATE_RULE_BUTTON = i18n.translate(
'xpack.securitySolution.addRules.upgradeRuleButton',
{
From 3401d3dc90b805d6d0b06d52dd3b08ff9965bf52 Mon Sep 17 00:00:00 2001
From: Peter Pisljar
Date: Tue, 12 Mar 2024 10:22:42 +0100
Subject: [PATCH 043/100] lens config builder docs (#177993)
---
dev_docs/lens/breakdown.mdx | 29 ++++++
dev_docs/lens/config_api.mdx | 82 ++++++++++++++++
dev_docs/lens/dataset.mdx | 20 ++++
dev_docs/lens/examples.mdx | 118 +++++++++++++++++++++++
dev_docs/lens/gauge.mdx | 84 +++++++++++++++++
dev_docs/lens/heatmap.mdx | 73 +++++++++++++++
dev_docs/lens/index.mdx | 13 +++
dev_docs/lens/metric.mdx | 82 ++++++++++++++++
dev_docs/lens/mosaic.mdx | 62 +++++++++++++
dev_docs/lens/pie.mdx | 67 ++++++++++++++
dev_docs/lens/regionmap.mdx | 53 +++++++++++
dev_docs/lens/table.mdx | 68 ++++++++++++++
dev_docs/lens/tagcloud.mdx | 50 ++++++++++
dev_docs/lens/treemap.mdx | 59 ++++++++++++
dev_docs/lens/xy.mdx | 175 +++++++++++++++++++++++++++++++++++
nav-kibana-dev.docnav.json | 60 ++++++++++++
16 files changed, 1095 insertions(+)
create mode 100644 dev_docs/lens/breakdown.mdx
create mode 100644 dev_docs/lens/config_api.mdx
create mode 100644 dev_docs/lens/dataset.mdx
create mode 100644 dev_docs/lens/examples.mdx
create mode 100644 dev_docs/lens/gauge.mdx
create mode 100644 dev_docs/lens/heatmap.mdx
create mode 100644 dev_docs/lens/index.mdx
create mode 100644 dev_docs/lens/metric.mdx
create mode 100644 dev_docs/lens/mosaic.mdx
create mode 100644 dev_docs/lens/pie.mdx
create mode 100644 dev_docs/lens/regionmap.mdx
create mode 100644 dev_docs/lens/table.mdx
create mode 100644 dev_docs/lens/tagcloud.mdx
create mode 100644 dev_docs/lens/treemap.mdx
create mode 100644 dev_docs/lens/xy.mdx
diff --git a/dev_docs/lens/breakdown.mdx b/dev_docs/lens/breakdown.mdx
new file mode 100644
index 000000000000..fe8dda73520f
--- /dev/null
+++ b/dev_docs/lens/breakdown.mdx
@@ -0,0 +1,29 @@
+### `breakdown`
+
+The `breakdown` configuration within the Lens Config Builder API allows developers to define how data should be segmented or aggregated in their visualizations.
+
+#### Types of Breakdown Configurations
+
+The `breakdown` configuration in case of using ES|QL or Datatable as a datasource just takes in the field name to use as a breakdown.
+
+When using index as a datasource, breakdown can still be a field name, in which case lens will try to choose the most appropriate option, or it could be one of the following:
+
+1. **Top Values (`LensBreakdownTopValuesConfig`):**
+- Breaks down data based on the top occurring values for a specified field.
+- Attributes include `field` (the field to break down by) and `size` (the number of top values to display).
+- Ideal for pie charts, tag clouds, or any visualization where highlighting the most common or significant categories is beneficial.
+
+2. **Date Histogram (`LensBreakdownDateHistogramConfig`):**
+- Segments data over time using a specified date field.
+- Attributes include `field` (the date field for the histogram), and `minimumInterval` (the smallest interval to use, e.g., `1M` for monthly).
+- Useful for time series data, showing trends over time in line charts, area charts, etc.
+
+3. **Intervals (`LensBreakdownIntervalsConfig`):**
+- Divides data into intervals based on a numeric field.
+- Attributes include `field` (the numeric field to create intervals from) and `granularity` (the interval size).
+- Applicable for histograms or any visualization that benefits from numeric range segmentation.
+
+4. **Filters (`LensBreakdownFiltersConfig`):**
+- Allows for custom segmentation of data based on a collection of Elasticsearch filters.
+- Attributes include an array of `filters`, each with a `label` (optional) and a `filter` string defining the filter query.
+- Offers maximum flexibility in data segmentation, suitable for creating comparative visualizations across custom-defined segments.
diff --git a/dev_docs/lens/config_api.mdx b/dev_docs/lens/config_api.mdx
new file mode 100644
index 000000000000..804e62c320c7
--- /dev/null
+++ b/dev_docs/lens/config_api.mdx
@@ -0,0 +1,82 @@
+---
+id: kibDevLensConfigAPI
+slug: /kibana-dev-docs/lens/config-builder
+title: Lens Config Builder API Documentation
+description: Lens Config Builder API Documentation
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'introduction']
+---
+
+## Introduction
+
+The Lens Config Builder API provides a streamlined and flexible interface for developers to construct and integrate Lens configurations within their applications. Lens, as a powerful visualization tool in Kibana, enables users to create, visualize, and analyze data in diverse and complex ways. This API aims to simplify the process of generating these visualizations programmatically, allowing for dynamic and customizable integration points with Lens. By abstracting the complexities of Lens configuration details, developers can focus on delivering rich data visualization experiences tailored to their application's needs.
+
+```
+import LensConfigBuilder, LensConfig from '@kbn/lens-embeddable-utils/config_builder';
+
+const config: LensConfig = {
+ chartType: 'metric',
+ title: 'my metric chart',
+ dataset: { esql: 'from my_index | stats sum=sum(my_field)'}
+ value: 'sum'
+}
+
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder(config, {
+ timeRange: { from: 'now-30d', to: 'now', type: 'relative' },
+ embeddable: true,
+}
+
+
+
+```
+
+## Main Interface
+
+### LensConfigBuilder
+
+The `LensConfigBuilder` class is the central interface of the API, facilitating the creation of various Lens chart types through a unified and simplified process. It leverages predefined chart configurations and integrates seamlessly with essential Kibana services, such as formula calculations and data view management, to produce either Lens attributes or embeddable inputs based on the developer's requirements.
+
+#### Constructor
+
+The constructor requires two parameters:
+
+- `formulaAPI`: An instance of `FormulaPublicApi`, allowing the builder to perform formula calculations necessary for certain visualizations.
+- `dataViewsAPI`: An instance of `DataViewsPublicPluginStart`, enabling the builder to access and manage data views within Kibana.
+
+#### build Method
+
+The `build` method is the primary method used to generate a Lens configuration. It accepts a `LensConfig` object, detailing the type of chart and its options, and an optional `LensConfigOptions` object for additional configuration options like filters, queries, and time ranges.
+
+**Parameters:**
+
+- `config`: A `LensConfig` object specifying the chart type and its configuration.
+- `options` (optional): A `LensConfigOptions` object providing additional settings such as embeddable options, time range overrides, filters, and queries.
+
+**Returns:** A Promise resolving to either `LensAttributes` or `LensEmbeddableInput`, depending on the options provided. This allows the generated configuration to be directly used within Kibana Lens visualizations.
+
+Here's a detailed breakdown of each property within the `LensConfigOptions`:
+
+### embeddable
+
+- **Type:** `boolean`
+- **Optional**
+- **Description:** Determines the format of the output generated by the `LensConfigBuilder`. When set to `true`, the output will be in the form of `LensEmbeddableInput`, suitable for embedding directly into a Kibana dashboard as an embeddable object. If `false` or not set, the output will be `LensAttributes`, representing the configuration attributes for Lens visualizations without the embedding specifics.
+
+### timeRange
+
+- **Type:** `TimeRange`
+- **Optional**
+- **Description:** Allows for an optional override of the time range for the visualization. The `TimeRange` object includes `from` and `to` properties to specify the start and end times, and a `type` property indicating whether the range is `relative` or `absolute`. This is particularly useful for tailoring the visualization to specific time frames of interest, independent of the global time filters applied in Kibana.
+
+### filters
+
+- **Type:** `Filter[]`
+- **Optional**
+- **Description:** Provides an array of `Filter` objects that will be applied to the visualization, enabling developers to pre-define and apply specific filters to the data being visualized. This allows for the creation of more focused and relevant visualizations by pre-filtering the data based on specific criteria.
+
+### query
+
+- **Type:** `Query`
+- **Optional**
+- **Description:** Allows specifying a query to further refine the data displayed in the visualization. The `Query` object includes a `language` property (e.g., `kuery` or `lucene`) and a `query` string, which represents the actual query to be executed. This is useful for dynamically adjusting the data set based on user input or application context, providing a flexible way to interact with the data.
diff --git a/dev_docs/lens/dataset.mdx b/dev_docs/lens/dataset.mdx
new file mode 100644
index 000000000000..848b08eae9af
--- /dev/null
+++ b/dev_docs/lens/dataset.mdx
@@ -0,0 +1,20 @@
+### `dataset`
+
+The `dataset` configuration within the Lens Config Builder API defines the source of data for a visualization.
+
+#### Types of Dataset Configurations
+
+1. **LensESQLDataset (`LensESQLDataset`):**
+- Utilizes the Elasticsearch Query Language (ES|QL) for retrieving data.
+- Attributes include:
+- `esql`: A string containing the ES|QL query. ES|QL is a powerful query language that allows for complex search and aggregation operations, making this dataset type particularly flexible and powerful for advanced data retrieval scenarios.
+
+2. **LensDatatableDataset (`LensDatatableDataset`):**
+- Represents data in a tabular format, suitable for direct visualization or further processing.
+- This dataset type is typically used when data is already aggregated or processed and just needs to be displayed.
+
+3. **LensDataviewDataset (`LensDataviewDataset`):**
+- Targets data within a specific Elasticsearch index or data view.
+- Attributes include:
+- `index`: The ID of the data view or the name of the Elasticsearch index pattern.
+- `timeFieldName` (optional): The name of the field used for time-based operations, providing context for time range queries and aggregations.
diff --git a/dev_docs/lens/examples.mdx b/dev_docs/lens/examples.mdx
new file mode 100644
index 000000000000..781d2af0d79e
--- /dev/null
+++ b/dev_docs/lens/examples.mdx
@@ -0,0 +1,118 @@
+---
+id: kibDevLensConfigAPIExamples
+slug: /kibana-dev-docs/lens/config-builder/examples
+title: Lens Config Builder API Examples
+description: Lens Config Builder API Examples
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'examples']
+---
+
+Here are a few simple configurations for different types of visualizations using the Lens Config Builder API.
+These examples demonstrate how to set up basic charts, including Metric, Pie, and XY (line chart) visualizations.
+Each configuration showcases the flexibility and ease of defining visual attributes, queries, and other options
+to tailor the visualization to specific requirements.
+
+### Metric Chart Configuration
+
+```javascript
+const metricConfig = {
+ chartType: 'metric',
+ title: 'Total Sales',
+ dataset: {
+ esql: 'from myindex | stats totalSales = sum(sales_field)',
+ },
+ value: 'totalSales',
+ label: 'Total Sales Value',
+};
+```
+
+**Explanation:**
+
+- `chartType`: Specifies the type of chart, in this case, a metric chart.
+- `title`: The title of the visualization, displayed as "Total Sales."
+- `dataset`: Defines the data source, in this case using ES|QL to select data.
+- `value`: Field name in the result to use for value.
+- `label`: The label for the metric, providing context to the value displayed.
+
+### Pie Chart Configuration
+
+```javascript
+const pieConfig = {
+ chartType: 'pie',
+ title: 'Sales by Category',
+ dataset: {
+ esql: 'from myindex | stats totalSales = sum(sales_field) by category_field | limit 10',
+ },
+ breakdown: ['category_field'],
+ value: 'totalSales',
+ legend: {
+ show: true,
+ position: 'right',
+ },
+};
+```
+
+**Explanation:**
+
+- `chartType`: Indicates that this configuration is for a pie chart.
+- `title`: Sets the visualization title to "Sales by Category."
+- `dataset`: Selects the data with ES|QL
+- `value`: specifies which field to use for value
+- `breakdown`: Specifies which field to use for breakdown
+- `legend`: Configures the legend to be shown on the right side of the chart, aiding in category identification.
+
+### XY Chart Configuration (Line Chart)
+
+```javascript
+const xyConfig = {
+ chartType: 'xy',
+ title: 'Monthly Sales Trend',
+ dataset: {
+ esql: 'FROM sales_data | EVAL timestamp=DATE_TRUNC(3 hour, @timestamp) | stats sales = SUM(sales_field) by timestamp',
+ },
+ layers: [
+ {
+ type: 'series',
+ seriesType: 'line',
+ xAxis: 'timestamp',
+ yAxis: [
+ {
+ value: 'sales',
+ label: 'Total Sales',
+ }
+ ],
+ },
+ ],
+ axisTitleVisibility: {
+ showXAxisTitle: true,
+ showYAxisTitle: true,
+ },
+};
+```
+
+**Explanation:**
+
+- `chartType`: Specifies an XY chart, which can represent various types of line, area, and bar charts.
+- `title`: The title for the visualization, "Monthly Sales Trend."
+- `dataset`: Uses ES|QL to select the data.
+- `layers`: Defines a single layer for the chart, in this case, a line chart representing sales over time.
+- `type`: Indicates the layer is a series.
+- `seriesType`: Specifies the chart as a line chart.
+- `xAxis`: Defines the field to use for x axis.
+- `yAxis`: Defines the field to use for y axis and the label
+- `axisTitleVisibility`: Ensures both X and Y axis titles are displayed for clarity.
+
+These configurations illustrate the API's capability to define various visualization types with a straightforward and comprehensible structure, enabling developers to quickly integrate rich data visualizations into their applications.
+
+
+### Converting to actual lens configuration
+
+Any of the above LensConfigs can be converted to actual lens configuration which can be passed to lens embeddable like this:
+
+```
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder(config, {
+ timeRange: { from: 'now-30d', to: 'now', type: 'relative' },
+ embeddable: true,
+}
+```
\ No newline at end of file
diff --git a/dev_docs/lens/gauge.mdx b/dev_docs/lens/gauge.mdx
new file mode 100644
index 000000000000..536ac90e1889
--- /dev/null
+++ b/dev_docs/lens/gauge.mdx
@@ -0,0 +1,84 @@
+---
+id: kibDevLensConfigAPIGauge
+slug: /kibana-dev-docs/lens/config-builder/gauge
+title: Lens Config Builder API - Gauge
+description: Lens Config Builder API - Gauge
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'gauge']
+---
+
+import Dataset from './dataset.mdx';
+import Breakdown from './breakdown.mdx';
+
+Understanding `LensGaugeConfig` in detail
+
+## Required Properties
+
+### `chartType`
+
+- **Type:** Fixed value `'gauge'`
+- **Description:** Sets the chart type to gauge.
+
+### `title`
+
+- **Type:** `string`
+- **Description:** The title of the visualization.
+
+
+
+### `value`
+
+- **Type:** `LensLayerQuery`
+- **Description:** Specifies the field or formula used to determine the main value displayed by the gauge. This is critical for representing the core metric around which the gauge visualization is centered.
+
+## Optional Properties
+
+### `label`
+
+- **Type:** `string`
+- **Description:** Offers a descriptive label for the gauge's main value, providing additional context and helping to clarify what the gauge measures.
+
+### `queryMinValue`
+
+- **Type:** `LensLayerQuery`
+- **Description:** Defines a query for calculating the minimum value of the gauge's scale. This is particularly useful for gauges that measure a metric's performance against predefined ranges.
+
+### `queryMaxValue`
+
+- **Type:** `LensLayerQuery`
+- **Description:** Determines a query for establishing the maximum value of the gauge's scale, setting the upper boundary for what the gauge can display.
+
+### `queryGoalValue`
+
+- **Type:** `LensLayerQuery`
+- **Description:** Allows specifying a goal or target value for the gauge, enabling users to visually assess how the current value compares to a set objective.
+
+### `shape`
+
+- **Type:** `'arc' | 'circle' | 'horizontalBullet' | 'verticalBullet'`
+- **Description:** Controls the appearance of the gauge by defining its shape. Each shape can convey the data differently, offering various stylistic and functional approaches to data presentation.
+
+
+
+## Example
+
+```
+const gaugeConfig: LensConfig = {
+ chartType: 'gauge',
+ title: 'CPU Utilization',
+ dataset: {
+ esql: 'from myindex | stats avgCpuUtilization = avg(cpu_utilization) | eval max=100 ',
+ },
+ value: 'avgCpuUtilization',
+ label: 'Average CPU Utilization',
+ queryMaxValue: 'max',
+ shape: 'arc',
+};
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder.build(gaugeConfig, {
+ timeRange: { from: 'now-1h', to: 'now', type: 'relative' },
+ embeddable: true,
+});
+```
+
+This example demonstrates how to create a gauge visualization using the `LensGaugeConfig`. It sets up a gauge to display the average CPU utilization.
\ No newline at end of file
diff --git a/dev_docs/lens/heatmap.mdx b/dev_docs/lens/heatmap.mdx
new file mode 100644
index 000000000000..8d5bd90f3459
--- /dev/null
+++ b/dev_docs/lens/heatmap.mdx
@@ -0,0 +1,73 @@
+---
+id: kibDevLensConfigAPIHeatmap
+slug: /kibana-dev-docs/lens/config-builder/heatmap
+title: Lens Config Builder API - Heatmap
+description: Lens Config Builder API - Heatmap
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'heatmap']
+---
+
+import Dataset from './dataset.mdx';
+import Breakdown from './breakdown.mdx';
+
+Understanding `LensHeatmapConfig` in detail
+
+## Required Properties
+
+### `chartType`
+
+- **Type:** Fixed value `'heatmap'`
+- **Description:** Sets the chart type to heatmap.
+
+### `title`
+
+- **Type:** `string`
+- **Description:** The title of the visualization.
+
+
+
+### `breakdown`
+
+- **Type:** `LensBreakdownConfig`
+- **Description:** Configures the data segmentation for Y-axis. Check breakdown configuration details below.
+
+### `xAxis`
+
+- **Type:** `LensBreakdownConfig`
+- **Description:** Defines the breakdown configuration for the X-axis in the heatmap. Check breakdown configuration details below.
+
+## Optional Properties
+
+### `legend`
+
+- **Type:** `Identity`
+- **Description:** Configures the legend for the heatmap. The legend settings include options to show or hide the legend and to specify its position ('top', 'left', 'bottom', 'right'). This is crucial for interpreting the colors and gradients used in the heatmap, as it provides a reference scale for the data values represented.
+
+
+
+
+## Example
+
+```
+const heatmapConfig: LensConfig = {
+ chartType: 'heatmap',
+ title: 'Heatmap Chart',
+ dataset: {
+ esql: 'from kibana_sample_data_logs | stats bytes=sum(bytes) by geo.dest, geo.src',
+ },
+ breakdown: 'geo.dest',
+ xAxis: 'geo.src',
+ value: 'bytes',
+ legend: {
+ show: true,
+ position: 'right',
+ },
+};
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder.build(heatmapConfig, {
+ timeRange: { from: 'now-1M', to: 'now', type: 'relative' },
+ embeddable: true,
+});
+```
+
+This example outlines how to create a heatmap visualization displaying website traffic, segmented by days of the week (`weekday`) and hours of the day (`hour`). The `breakdown` and `xAxis` configurations segment the data into a grid where each cell represents the number of sessions during a specific hour on a given day. The use of an ESQL query in the `dataset` configuration allows for direct aggregation of traffic data, facilitating efficient and dynamic heatmap generation. The legend is configured to be visible on the right, providing a guide for interpreting the color intensities of the heatmap.
\ No newline at end of file
diff --git a/dev_docs/lens/index.mdx b/dev_docs/lens/index.mdx
new file mode 100644
index 000000000000..a962895309db
--- /dev/null
+++ b/dev_docs/lens/index.mdx
@@ -0,0 +1,13 @@
+---
+id: kibDevLensOverview
+slug: /kibana-dev-docs/lens
+title: Lens Documentation
+description: Lens Documentation for Developers
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'landing']
+---
+
+
diff --git a/dev_docs/lens/metric.mdx b/dev_docs/lens/metric.mdx
new file mode 100644
index 000000000000..3ea283088e4b
--- /dev/null
+++ b/dev_docs/lens/metric.mdx
@@ -0,0 +1,82 @@
+---
+id: kibDevLensConfigAPIMetric
+slug: /kibana-dev-docs/lens/config-builder/metric
+title: Lens Config Builder API - Metric
+description: Lens Config Builder API - Metric
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'metric']
+---
+
+import Dataset from './dataset.mdx';
+import Breakdown from './breakdown.mdx';
+
+
+Understanding `LensMetricConfig` in detail
+
+## Required Properties
+
+### `chartType`
+
+- **Type:** Fixed value `'metric'`
+- **Description:** Sets the chart type to metric.
+
+### `title`
+
+- **Type:** `string`
+- **Description:** The title of the visualization.
+
+
+
+### `value`
+
+- **Type:** `LensLayerQuery`
+- **Description:** A field to use for the value if the dataset is ESQL or Datatable or LensFormula is dataset is an index pattern.
+
+## Optional Properties
+
+### `label`
+
+- **Type:** `string`
+- **Description:** Provides a descriptive label for the displayed metric, enhancing the chart's interpretability by offering additional details about the metric.
+
+### `querySecondaryMetric`
+
+- **Type:** `LensLayerQuery`
+- **Description:** Allows specifying a secondary metric, same as value it should be the name of field or lens formula.
+
+### `queryMaxValue`
+
+- **Type:** `LensLayerQuery`
+- **Description:** Used to define a query for calculating a maximum value, same as value it should be the name of field or lens formula.
+
+
+
+### `trendLine`
+
+- **Type:** `boolean`
+- **Description:** When set to true, indicates that a trend line should be displayed, providing a visual indication of how the metric has changed over time.
+
+### `subtitle`
+
+- **Type:** `string`
+- **Description:** An optional subtitle for the chart, which can be used to provide additional context, explanatory notes, or any supplementary information that aids in understanding the metric.
+
+
+## Example
+
+```
+const config: LensConfig = {
+ chartType: 'metric',
+ title: 'Total Sales',
+ dataset: {
+ esql: 'from myindex | stats totalSales = sum(sales_field)',
+ },
+ value: 'totalSales',
+ label: 'Total Sales Value',
+};
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder(config, {
+ timeRange: { from: 'now-30d', to: 'now', type: 'relative' },
+ embeddable: true,
+}
+```
\ No newline at end of file
diff --git a/dev_docs/lens/mosaic.mdx b/dev_docs/lens/mosaic.mdx
new file mode 100644
index 000000000000..7fcc41f41cc4
--- /dev/null
+++ b/dev_docs/lens/mosaic.mdx
@@ -0,0 +1,62 @@
+---
+id: kibDevLensConfigAPIMosaic
+slug: /kibana-dev-docs/lens/config-builder/mosaic
+title: Lens Config Builder API - Mosaic
+description: Lens Config Builder API - Mosaic
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'mosaic']
+---
+
+import Dataset from './dataset.mdx';
+import Breakdown from './breakdown.mdx';
+
+Understanding `LensMosaicConfig` in detail
+
+## Required Properties
+
+### `chartType`
+
+- **Type:** Fixed value `'mosaic'`
+- **Description:** Sets the chart type to mosaic, a variation of a stacked bar chart that displays the distribution of data across two categories.
+
+### `title`
+
+- **Type:** `string`
+- **Description:** The title of the visualization.
+
+
+
+### `breakdown`
+
+- **Type:** `LensBreakdownConfig`
+- **Description:** Configures the primary categorization of data for the mosaic chart. This breakdown specifies the main grouping of data, typically represented along one of the chart's axes. Check breakdown configuration details below.
+
+### `xAxis`
+
+- **Type:** `LensBreakdownConfig`
+- **Description:** Defines the configuration for the X-axis categorization in the mosaic chart. It determines how data points are grouped along the horizontal axis, influencing the chart's layout and the distribution of stacked segments. Check breakdown configuration details below.
+
+## Optional Properties
+
+
+
+## Example
+
+```
+const mosaicConfig: LensConfig = {
+ chartType: 'mosaic',
+ title: 'Mosaic Chart',
+ dataset: {
+ esql: 'from kibana_sample_data_logs | stats bytes = sum(bytes) by geo.src, geo.dest',
+ },
+ breakdown: 'geo.src',
+ xAxis: 'geo.dest',
+};
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder.build(mosaicConfig, {
+ timeRange: { from: 'now-1y', to: 'now', type: 'relative' },
+ embeddable: true,
+});
+```
+
+This example demonstrates configuring a mosaic chart to visualize the distribution of product sales across different regions and categories. The `breakdown` is set to segment data by the top 5 regions, while the `xAxis` config segments further by the top 10 product categories. An ESQL query aggregates sales within the specified groupings, enabling the mosaic chart to display the proportional distribution of sales across these dimensions. This type of visualization is particularly useful for identifying patterns or disparities in sales performance across different market segments.
\ No newline at end of file
diff --git a/dev_docs/lens/pie.mdx b/dev_docs/lens/pie.mdx
new file mode 100644
index 000000000000..f511a431f84f
--- /dev/null
+++ b/dev_docs/lens/pie.mdx
@@ -0,0 +1,67 @@
+---
+id: kibDevLensConfigAPIPie
+slug: /kibana-dev-docs/lens/config-builder/pie
+title: Lens Config Builder API - Pie
+description: Lens Config Builder API - Pie
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'pie']
+---
+
+import Dataset from './dataset.mdx';
+import Breakdown from './breakdown.mdx';
+
+Understanding `LensPieConfig` in detail
+
+## Required Properties
+
+### `chartType`
+
+- **Type:** Fixed values `'pie' | 'donut'`
+- **Description:** Sets the chart type to either pie or donut.
+
+### `title`
+
+- **Type:** `string`
+- **Description:** The title of the visualization.
+
+
+
+### `breakdown`
+
+- **Type:** `LensBreakdownConfig[]`
+- **Description:** An array of breakdown configurations to segment the data into slices. Each breakdown configures how data should be grouped and displayed in the pie or donut chart, enabling detailed and meaningful data representations. Check breakdown configuration details below.
+
+## Optional Properties
+
+### `legend`
+
+- **Type:** `Identity`
+- **Description:** Configures the chart's legend. It includes properties to show or hide the legend and to position it relative to the chart ('top', 'left', 'bottom', 'right'). This helps in identifying what each slice of the pie or donut chart represents.
+
+
+
+
+## Example
+
+```
+const pieConfig: LensConfig = {
+ chartType: 'pie',
+ title: 'Bytes by Region',
+ dataset: {
+ esql: 'from sales_data | stats avgBytes = avg(bytes) by geo.src',
+ },
+ breakdown: [
+ 'geo.src'
+ ],
+ legend: {
+ show: true,
+ position: 'right',
+ },
+};
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder.build(pieConfig, {
+ timeRange: { from: 'now-1y', to: 'now', type: 'relative' },
+ embeddable: true,
+});
+```
+
diff --git a/dev_docs/lens/regionmap.mdx b/dev_docs/lens/regionmap.mdx
new file mode 100644
index 000000000000..2eee2c8f9dce
--- /dev/null
+++ b/dev_docs/lens/regionmap.mdx
@@ -0,0 +1,53 @@
+---
+id: kibDevLensConfigAPIRegionMap
+slug: /kibana-dev-docs/lens/config-builder/regionmap
+title: Lens Config Builder API - Region Map
+description: Lens Config Builder API - Region Map
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'regionmap']
+---
+
+import Dataset from './dataset.mdx';
+import Breakdown from './breakdown.mdx';
+
+Understanding `LensRegionMapConfig` in detail
+
+## Required Properties
+
+### `chartType`
+
+- **Type:** Fixed value `'regionmap'`
+- **Description:** Sets the chart type to region map, which is used for displaying geographical data across different regions on a map. This visualization type is excellent for spatial analysis, showing how metrics vary across geographic locations.
+
+### `title`
+
+- **Type:** `string`
+- **Description:** The title of the visualization.
+
+
+
+
+
+## Optional Properties
+
+
+
+## Example
+
+```
+const regionMapConfig: LensConfig = {
+ chartType: 'regionmap',
+ title: 'Sales by Country',
+ dataset: {
+ esql: 'from kibana_sample_data_logs | stats bytes=sum(bytes) by geo.dest',
+ },
+ breakdown: 'geo.dest',
+ value: 'bytes',
+};
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder.build(regionMapConfig, {
+ timeRange: { from: 'now-1y', to: 'now', type: 'relative' },
+ embeddable: true,
+});
+```
+
diff --git a/dev_docs/lens/table.mdx b/dev_docs/lens/table.mdx
new file mode 100644
index 000000000000..1a0e4786aca3
--- /dev/null
+++ b/dev_docs/lens/table.mdx
@@ -0,0 +1,68 @@
+---
+id: kibDevLensConfigAPITable
+slug: /kibana-dev-docs/lens/config-builder/table
+title: Lens Config Builder API - Table
+description: Lens Config Builder API - Table
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'table']
+---
+
+import Dataset from './dataset.mdx';
+import Breakdown from './breakdown.mdx';
+
+Understanding `LensTableConfig` in detail
+
+## Required Properties
+
+### `chartType`
+
+- **Type:** Fixed value `'table'`
+- **Description:** Sets the chart type to table, allowing for the display of data in a tabular format. Tables are versatile for detailed data analysis, enabling the display of multiple dimensions and metrics side by side.
+
+### `title`
+
+- **Type:** `string`
+- **Description:** The title of the visualization.
+
+
+
+## Optional Properties
+
+### `splitBy`
+
+- **Type:** `LensBreakdownConfig[]`
+- **Optional**
+- **Description:** An array of breakdown configurations to segment the data into different sections within the table. Each breakdown can create a new column or row based on the field specified, allowing for complex data organization and grouping. Check breakdown configuration details below.
+
+### `breakdown`
+
+- **Type:** `LensBreakdownConfig[]`
+- **Optional**
+- **Description:** Similar to `splitBy`, but specifically used for creating additional columns based on the breakdown of a particular field. It's useful for comparing metrics across different categories directly within the table. Check breakdown configuration details below.
+
+
+
+
+## Example
+
+```
+const tableConfig: LensConfig = {
+ chartType: 'table',
+ title: 'Table chart',
+ dataset: {
+ esql: 'from kibana_sample_data_logs | stats bytes=sum(bytes) by geo.dest, geo.src',
+ },
+ splitBy: [
+ 'geo.src'
+ ],
+ breakdown: [
+ 'geo.dest'
+ ],
+ value: 'bytes',
+};
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder.build(tableConfig, {
+ timeRange: { from: 'now-1y', to: 'now', type: 'relative' },
+ embeddable: true,
+});
+```
\ No newline at end of file
diff --git a/dev_docs/lens/tagcloud.mdx b/dev_docs/lens/tagcloud.mdx
new file mode 100644
index 000000000000..734aa9cd23ec
--- /dev/null
+++ b/dev_docs/lens/tagcloud.mdx
@@ -0,0 +1,50 @@
+---
+id: kibDevLensConfigAPITagCloud
+slug: /kibana-dev-docs/lens/config-builder/tagcloud
+title: Lens Config Builder API - Tag Cloud
+description: Lens Config Builder API - Tag Cloud
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'tagcloud']
+---
+
+import Dataset from './dataset.mdx';
+import Breakdown from './breakdown.mdx';
+
+Understanding `LensTagCloudConfig` in detail
+
+## Required Properties
+
+### `chartType`
+
+- **Type:** Fixed value `'tagcloud'`
+- **Description:** Sets the chart type to tag cloud. Tag clouds are visual representations where tags are depicted in varying sizes, indicating the frequency or importance of each tag. This visualization type is beneficial for quickly identifying the most prominent or common terms in a dataset.
+
+### `title`
+
+- **Type:** `string`
+- **Description:** The title of the visualization.
+
+
+
+
+
+## Optional Properties
+
+## Example
+
+```
+const tagCloudConfig: LensConfig = {
+ chartType: 'tagcloud',
+ title: 'TagCloud chart',
+ dataset: {
+ esql: 'from kibana_sample_data_logs | stats bytes=sum(bytes) by geo.dest',
+ },
+ breakdown: 'geo.dest',
+ value: 'bytes',
+};
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder.build(tagCloudConfig, {
+ timeRange: { from: 'now-1M', to: 'now', type: 'relative' },
+ embeddable: true,
+});
+```
\ No newline at end of file
diff --git a/dev_docs/lens/treemap.mdx b/dev_docs/lens/treemap.mdx
new file mode 100644
index 000000000000..88ee81640fe9
--- /dev/null
+++ b/dev_docs/lens/treemap.mdx
@@ -0,0 +1,59 @@
+---
+id: kibDevLensConfigAPITreeMap
+slug: /kibana-dev-docs/lens/config-builder/treemap
+title: Lens Config Builder API - TreeMap
+description: Lens Config Builder API - TreeMap
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'treemap']
+---
+
+import Dataset from './dataset.mdx';
+import Breakdown from './breakdown.mdx';
+
+Understanding `LensTreeMapConfig` in detail
+
+## Required Properties
+
+### `chartType`
+
+- **Type:** Fixed value `'treemap'`
+- **Description:** Sets the chart type to treemap. Treemaps are used to visualize hierarchical data using nested rectangles. Each branch of the tree is given a rectangle, which is then tiled with smaller rectangles representing sub-branches. A leaf node's size and color can vary to show statistical information about the node and its relationship to the rest of the tree.
+
+### `title`
+
+- **Type:** `string`
+- **Description:** The title of the visualization.
+
+
+
+### `breakdown`
+
+- **Type:** `LensBreakdownConfig[]`
+- **Description:** An array of breakdown configurations to hierarchically segment the data into nested rectangles. The breakdowns determine how the data is grouped and subdivided, with each level of the hierarchy represented by a deeper level of nesting in the treemap. Check breakdown configuration details below.
+
+
+
+## Optional Properties
+
+## Example
+
+```
+const treemapConfig: LensConfig = {
+ chartType: 'treemap',
+ title: 'Treemap chart',
+ dataset: {
+ esql: 'from kibana_sample_data_logs | stats bytes = sum(bytes) by geo.src, geo.dest',
+ },
+ breakdown: [
+ 'geo.src',
+ 'geo.dest',
+ ],
+ value: 'bytes',
+};
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder.build(treemapConfig, {
+ timeRange: { from: 'now-1y', to: 'now', type: 'relative' },
+ embeddable: true,
+});
+```
+
diff --git a/dev_docs/lens/xy.mdx b/dev_docs/lens/xy.mdx
new file mode 100644
index 000000000000..5f0e3af272b8
--- /dev/null
+++ b/dev_docs/lens/xy.mdx
@@ -0,0 +1,175 @@
+---
+id: kibDevLensConfigAPIXY
+slug: /kibana-dev-docs/lens/config-builder/xy
+title: Lens Config Builder API - XY Chart
+description: Lens Config Builder API - XY Chart
+date: 2024-03-04
+tags: ['kibana', 'dev', 'lens', 'xy']
+---
+
+import Dataset from './dataset.mdx';
+import Breakdown from './breakdown.mdx';
+
+Understanding `LensXYConfig` in detail
+
+## Required Properties
+
+### `chartType`
+
+- **Type:** Fixed value `'xy'`
+- **Description:** Sets the chart type to XY, which is used for creating scatter plots, line charts, bar charts, and area charts. This versatile visualization type is ideal for comparing data across two axes, revealing trends, distributions, and relationships between variables.
+
+### `title`
+
+- **Type:** `string`
+- **Description:** The title of the visualization.
+
+
+
+### `layers`
+
+- **Type:** `Array`
+- **Description:** An array of layer configurations that define the data series, annotations, or reference lines to be displayed on the chart. Each layer type brings a different aspect of data visualization to the XY chart, allowing for a rich, multi-dimensional analysis.
+
+## Optional Properties
+
+### `legend`
+
+- **Type:** `Identity`
+- **Description:** Configures the chart's legend, including options to show or hide the legend and to specify its position ('top', 'left', 'bottom', 'right'). The legend is essential for identifying different data series within the chart.
+
+### `axisTitleVisibility`
+
+- **Type:** `Identity`
+- **Description:** Controls the visibility of axis titles, allowing for a clearer understanding of what each axis represents.
+
+### `emphasizeFitting`
+
+- **Type:** `boolean`
+- **Description:** When set to true, emphasizes the fitting of lines to the data points in line charts, making trends and patterns more apparent.
+
+### `fittingFunction`
+
+- **Type:** `'None' | 'Zero' | 'Linear' | 'Carry' | 'Lookahead' | 'Average' | 'Nearest'`
+- **Description:** Defines the method used to fit lines through the data points in line charts, affecting how trends are interpreted.
+
+### `yBounds`
+
+- **Type:** `LensYBoundsConfig`
+- **Description:** Specifies custom or automatic bounds for the Y-axis, enabling more control over how data ranges are displayed.
+
+
+For the XY chart within the Lens Config Builder API, there are three distinct types of series layers that can be added: `Annotation`, `Series`, and `ReferenceLine`. Each layer type serves a unique purpose in enhancing the chart with additional context, data representation, or benchmarks. Here's a detailed explanation of each series type:
+
+### Annotation Layer (`LensAnnotationLayer`)
+
+#### Purpose
+The Annotation Layer is used to add textual notes or icons at specific points on the chart, providing extra context or highlighting significant events or values. Annotations can help explain anomalies, mark milestones, or simply draw attention to certain aspects of the data.
+
+#### Key Properties
+- **`events`**: An array of objects specifying the annotation details. Each event can be tied to a specific point in time (`datetime`) or be based on a condition that matches data points (`field` and `filter`).
+- **`color`**: Specifies the color of the annotation marker or text, enhancing visual distinction.
+- **`icon`**: (Optional) Allows specifying an icon to be displayed as part of the annotation.
+
+### Series Layer (`LensSeriesLayer`)
+
+#### Purpose
+The Series Layer is the primary means of displaying data on an XY chart. It can represent data in various forms, including lines, bars, and areas, to depict trends, distributions, and comparisons across two axes.
+
+#### Key Properties
+- **`seriesType`**: Determines the visual representation of the series (e.g., `'line'`, `'bar'`, `'area'`), each offering a different way to interpret the underlying data.
+- **`xAxis`** Define the field to use on x-axis or lens formula when using index dataset.
+- **`breakdown`**: Field to breakdown or detailed breakdown configuration when using index dataset.
+- **`yaxis`**:
+ - **Type:** `Array`
+ - **Description:** Defines one or more metrics to be plotted on the Y-axis of the chart. Each item in the array represents a different metric or aspect of the data that will be visualized, allowing for a comprehensive and multi-dimensional analysis within a single chart.
+
+#### Sub-properties of `LensBaseLayer` within `yAxis`:
+
+- **`label`** (Optional)
+- **Type:** `string`
+- **Description:** Provides a descriptive label for the metric, which can be used for legend text or tooltips, enhancing the interpretability of the chart by offering additional details about what the metric represents.
+
+- **`filter`** (Optional)
+- **Type:** `string`
+- **Description:** Allows specifying a Kibana filter string to refine the data points included in the metric calculation, enabling the isolation of specific segments or conditions within the data.
+
+- **`format`** (Optional)
+- **Type:** `'bits' | 'bytes' | 'currency' | 'duration' | 'number' | 'percent' | 'string'`
+- **Description:** Defines the format in which the metric values should be displayed, facilitating the appropriate presentation of different types of data, such as financial figures, percentages, or raw numbers.
+
+- **`decimals`** (Optional)
+- **Type:** `number`
+- **Description:** Specifies the number of decimal places to include in the metric's displayed values, allowing for precision control in the presentation of data.
+
+- **`normalizeByUnit`** (Optional)
+- **Type:** `'s' | 'm' | 'h' | 'd'`
+- **Description:** Applies normalization of time-based metrics to a specified unit (seconds, minutes, hours, days), useful for standardizing time-related metrics for easier comparison and analysis.
+
+- **`compactValues`** (Optional)
+- **Type:** `boolean`
+- **Description:** When set to true, large numbers will be displayed in a compact format, making the chart easier to read by reducing the space needed for numerical values.
+
+- **`randomSampling`** (Optional)
+- **Type:** `number`
+- **Description:** Specifies a percentage (0-100) for random sampling of the data points, which can be useful for large datasets to improve chart rendering performance while still providing a representative view of the data trends.
+
+- **`useGlobalFilter`** (Optional)
+- **Type:** `boolean`
+- **Description:** Determines whether the chart should apply global filters defined in the dashboard or visualization context, allowing the metric to reflect broader data filtering criteria.
+
+- **`seriesColor`** (Optional)
+- **Type:** `string`
+- **Description:** Sets a specific color for the data series, enhancing the visual distinction between multiple metrics or series on the chart.
+
+- **`value`**
+- **Type:** `LensLayerQuery`
+- **Description:** The primary property that specifies the field or lens formula used to calculate the metric displayed on the Y-axis.
+
+### Reference Line Layer (`LensReferenceLineLayer`)
+
+#### Purpose
+The Reference Line Layer is used to add horizontal lines to the chart, serving as benchmarks or targets. These lines can represent goals, thresholds, averages, or any other fixed value that provides context to the data displayed.
+
+#### Key Properties
+- **`value`**: The fixed value where the reference line should be drawn. It can represent a numeric threshold, average, or any specific value relevant to the data or business logic.
+- **`lineThickness`**, **`color`**, and **`fill`**: Customize the appearance of the reference line, including its thickness, color, and whether the area above or below the line should be shaded to indicate a region of interest.
+
+## Example
+
+```
+const xyConfig: LensConfig = {
+ chartType: 'xy',
+ title: 'XY Chart',
+ dataset: {
+ esql: 'FROM sales_data | EVAL timestamp=DATE_TRUNC(3 hour, @timestamp) | stats sales = SUM(sales_field) by timestamp',
+ },
+ layers: [
+ {
+ type: 'series',
+ seriesType: 'line',
+ xAxis: 'timestamp',
+ yAxis: [
+ {
+ value: 'sales',
+ label: 'Total Sales',
+ },
+ ],
+ },
+ ],
+ legend: {
+ show: true,
+ position: 'bottom',
+ },
+ axisTitleVisibility: {
+ showXAxisTitle: true,
+ showYAxisTitle: true,
+ },
+};
+const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI);
+const lensConfig = configBuilder.build(xyConfig, {
+ timeRange: { from: 'now-1y', to: 'now', type: 'relative' },
+ embeddable: true,
+});
+```
+
diff --git a/nav-kibana-dev.docnav.json b/nav-kibana-dev.docnav.json
index d4eb3aaba6dd..f7f412e57636 100644
--- a/nav-kibana-dev.docnav.json
+++ b/nav-kibana-dev.docnav.json
@@ -239,6 +239,66 @@
}
]
},
+ {
+ "label": "Lens",
+ "pageId": "kibDevLensOverview",
+ "items": [
+ {
+ "label": "Lens Config API",
+ "id": "kibDevLensConfigAPI",
+ "items": [
+ {
+ "label": "Introduction",
+ "id": "kibDevLensConfigAPI"
+ },
+ {
+ "label": "Examples",
+ "id": "kibDevLensConfigAPIExamples"
+ },
+ {
+ "label": "Metric Chart",
+ "id": "kibDevLensConfigAPIMetric"
+ },
+ {
+ "label": "Gauge Chart",
+ "id": "kibDevLensConfigAPIGauge"
+ },
+ {
+ "label": "Pie Chart",
+ "id": "kibDevLensConfigAPIPie"
+ },
+ {
+ "label": "Mosaic Chart",
+ "id": "kibDevLensConfigAPIMosaic"
+ },
+ {
+ "label": "TreeMap Chart",
+ "id": "kibDevLensConfigAPITreeMap"
+ },
+ {
+ "label": "TagCloud Chart",
+ "id": "kibDevLensConfigAPITagCloud"
+ },
+ {
+ "label": "RegionMap Chart",
+ "id": "kibDevLensConfigAPIRegionMap"
+ },
+ {
+ "label": "Table Chart",
+ "id": "kibDevLensConfigAPITable"
+ },
+ {
+ "label": "Heatmap Chart",
+ "id": "kibDevLensConfigAPIHeatmap"
+ },
+ {
+ "label": "XY Chart",
+ "id": "kibDevLensConfigAPIXY"
+ }
+ ]
+ }
+ ]
+ },
{
"label": "Contributors Newsletters",
"items": [
From 322b9a4ecb55a5db3295a5f764c21c8d7b37d400 Mon Sep 17 00:00:00 2001
From: Alexey Antonov
Date: Tue, 12 Mar 2024 11:56:02 +0200
Subject: [PATCH 044/100] fix: [Dashboard > Entity Analytics: Risk Scores
Table][KEYBOARD]: Elements with keyboard focus must be visible (#178317)
Closes: https://github.com/elastic/security-team/issues/8624
## Description
The Overview dashboard has two buttons that are invisible on keyboard
focus. These buttons toggle modal dialogs and are only visible on hover.
Screenshot attached.
### Steps to recreate
1. Open [Entity Analytics
dashboard](https://kibana.siem.estc.dev/app/security/entity_analytics)
2. Open dev tools and type `document.activeElement` into the live
expression window to have the active element follow your focus
3. Tab through the view until focus gets "lost" or disappears in the
User Risk Scores table rows
4. Verify focus is on a button that is not visible on the page
### Screen
https://github.com/elastic/kibana/assets/20072247/0ca8db38-006a-49ea-9019-e23078844c10
---
.../entity_analytics/components/styled_basic_table.tsx | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/styled_basic_table.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/styled_basic_table.tsx
index d49c8e1e9389..9b150aade8b9 100644
--- a/x-pack/plugins/security_solution/public/entity_analytics/components/styled_basic_table.tsx
+++ b/x-pack/plugins/security_solution/public/entity_analytics/components/styled_basic_table.tsx
@@ -15,17 +15,18 @@ export const StyledBasicTable = styled(EuiBasicTable)`
}
}
- .inlineActions {
+ .inlineActions button {
opacity: 0;
}
.EntityAnalyticsTableHoverActions {
- .inlineActions-popoverOpen {
+ .inlineActions-popoverOpen button {
opacity: 1;
}
- .inline-actions-table-cell:hover {
- .inlineActions {
+ .inline-actions-table-cell {
+ .inlineActions button:focus-visible,
+ &:hover .inlineActions button {
opacity: 1;
}
}
From d2d0c83cd3d12fc8fbe2d46d44ab174995c0a5b1 Mon Sep 17 00:00:00 2001
From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com>
Date: Tue, 12 Mar 2024 11:05:02 +0100
Subject: [PATCH 045/100] [Lens] show the "Requires field" validation message
for empty visualization for inline editing (#178393)
Fixes #178237
In inline editing, the 'requires field' message appears even when the
chart is empty. This behavior differs from the Lens editor, where the
message is not shown when the chart is empty. The reason for this
difference is that in Lens, we can easily start from an empty state and
the chart workspace reflects it. However, in the inline Lens editor, we
render the last correct state in the embeddable even if configuration is
empty.
Adding this warning will help users understand why the state in the
embeddable is desynchronized.
Co-authored-by: Stratoula Kalafateli
---
.../config_panel/layer_panel.test.tsx | 32 +++++++++++++++++++
.../editor_frame/config_panel/layer_panel.tsx | 10 +++---
2 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx
index 08fb71bc5979..119e5216488f 100644
--- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx
+++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx
@@ -241,6 +241,38 @@ describe('LayerPanel', () => {
expect(screen.getByText('Requires field')).toBeInTheDocument();
});
+ it('should not render the required warning when the chart is empty', async () => {
+ mockVisualization.getConfiguration.mockReturnValue({
+ groups: [
+ {
+ ...defaultGroup,
+ groupLabel: 'B',
+ groupId: 'b',
+ requiredMinDimensionCount: 1,
+ },
+ ],
+ });
+
+ renderLayerPanel();
+ expect(screen.queryByText('Requires field')).not.toBeInTheDocument();
+ });
+
+ it('should render the required warning when the chart is empty but isInlineEditing', async () => {
+ mockVisualization.getConfiguration.mockReturnValue({
+ groups: [
+ {
+ ...defaultGroup,
+ groupLabel: 'B',
+ groupId: 'b',
+ requiredMinDimensionCount: 1,
+ },
+ ],
+ });
+
+ renderLayerPanel({ setIsInlineFlyoutVisible: jest.fn() });
+ expect(screen.queryByText('Requires field')).toBeInTheDocument();
+ });
+
it('should tell the user to remove the correct number of dimensions', async () => {
mockVisualization.getConfiguration.mockReturnValue({
groups: [
diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx
index 3c203cacff3b..6ed48175ef22 100644
--- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx
+++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx
@@ -76,6 +76,8 @@ export function LayerPanel(props: LayerPanelProps) {
shouldDisplayChartSwitch,
} = props;
+ const isInlineEditing = Boolean(props?.setIsInlineFlyoutVisible);
+
const isSaveable = useLensSelector((state) => state.lens.isSaveable);
const datasourceStates = useLensSelector(selectDatasourceStates);
@@ -434,7 +436,7 @@ export function LayerPanel(props: LayerPanelProps) {
.map((group, groupIndex) => {
let errorText: string = '';
- if (!isEmptyLayer) {
+ if (!isEmptyLayer || isInlineEditing) {
if (
group.requiredMinDimensionCount &&
group.requiredMinDimensionCount > group.accessors.length
@@ -659,7 +661,7 @@ export function LayerPanel(props: LayerPanelProps) {
handleClose={() => {
setPanelSettingsOpen(false);
}}
- isInlineEditing={Boolean(props?.setIsInlineFlyoutVisible)}
+ isInlineEditing={isInlineEditing}
>
@@ -726,7 +728,7 @@ export function LayerPanel(props: LayerPanelProps) {
isOpen={isDimensionPanelOpen}
isFullscreen={isFullscreen}
label={openColumnGroup?.dimensionEditorGroupLabel ?? (openColumnGroup?.groupLabel || '')}
- isInlineEditing={Boolean(props?.setIsInlineFlyoutVisible)}
+ isInlineEditing={isInlineEditing}
handleClose={closeDimensionEditor}
panel={
<>
@@ -786,7 +788,7 @@ export function LayerPanel(props: LayerPanelProps) {
addLayer: props.addLayer,
removeLayer: props.onRemoveLayer,
panelRef,
- isInlineEditing: Boolean(props?.setIsInlineFlyoutVisible),
+ isInlineEditing,
}}
/>
From e864880173a9487c11bc97f20238435754bbdcb0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Efe=20G=C3=BCrkan=20YALAMAN?=
Date: Tue, 12 Mar 2024 11:29:59 +0100
Subject: [PATCH 046/100] [Search] Update configuration updates immediately
after configuration changed (#178171)
## Summary
https://github.com/elastic/kibana/assets/1410658/9646ef5a-0a50-481e-93ae-864cc404d5d7
### Checklist
Delete any items that are not applicable to this PR.
- [ ] [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
---
.../connector_configuration.tsx | 12 ++++-----
.../connector_detail/connector_view_logic.ts | 26 +++++++++++++------
2 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx
index 5319f0404238..26df487caf19 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx
@@ -37,7 +37,6 @@ import { HttpLogic } from '../../../shared/http';
import { LicensingLogic } from '../../../shared/licensing';
import { EuiButtonTo, EuiLinkTo } from '../../../shared/react_router_helpers';
import { GenerateConnectorApiKeyApiLogic } from '../../api/connector/generate_connector_api_key_api_logic';
-import { ConnectorConfigurationApiLogic } from '../../api/connector/update_connector_configuration_api_logic';
import { CONNECTOR_DETAIL_TAB_PATH } from '../../routes';
import { SyncsContextMenu } from '../search_index/components/header_actions/syncs_context_menu';
import { ApiKeyConfig } from '../search_index/connector/api_key_configuration';
@@ -54,13 +53,12 @@ import { NativeConnectorConfiguration } from './native_connector_configuration';
export const ConnectorConfiguration: React.FC = () => {
const { data: apiKeyData } = useValues(GenerateConnectorApiKeyApiLogic);
- const { fetchConnector } = useActions(ConnectorViewLogic);
- const { index, isLoading, connector } = useValues(ConnectorViewLogic);
+ const { index, isLoading, connector, updateConnectorConfigurationStatus } =
+ useValues(ConnectorViewLogic);
const cloudContext = useCloudDetails();
const { hasPlatinumLicense } = useValues(LicensingLogic);
- const { status } = useValues(ConnectorConfigurationApiLogic);
- const { makeRequest } = useActions(ConnectorConfigurationApiLogic);
const { errorConnectingMessage, http } = useValues(HttpLogic);
+ const { fetchConnector, updateConnectorConfiguration } = useActions(ConnectorViewLogic);
if (!connector) {
return <>>;
@@ -195,9 +193,9 @@ export const ConnectorConfiguration: React.FC = () => {
- makeRequest({
+ updateConnectorConfiguration({
configuration,
connectorId: connector.id,
})
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_view_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_view_logic.ts
index c06a82307f50..a1eef12c28e8 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_view_logic.ts
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_view_logic.ts
@@ -23,9 +23,12 @@ import {
CachedFetchConnectorByIdApiLogicValues,
} from '../../api/connector/cached_fetch_connector_by_id_api_logic';
+import {
+ ConnectorConfigurationApiLogic,
+ PostConnectorConfigurationActions,
+} from '../../api/connector/update_connector_configuration_api_logic';
import { FetchIndexActions, FetchIndexApiLogic } from '../../api/index/fetch_index_api_logic';
import { ElasticsearchViewIndex } from '../../types';
-import { IndexNameActions, IndexNameLogic } from '../search_index/index_name_logic';
export interface ConnectorViewActions {
fetchConnector: CachedFetchConnectorByIdApiLogicActions['makeRequest'];
@@ -38,10 +41,12 @@ export interface ConnectorViewActions {
fetchIndexApiError: FetchIndexActions['apiError'];
fetchIndexApiReset: FetchIndexActions['apiReset'];
fetchIndexApiSuccess: FetchIndexActions['apiSuccess'];
- setIndexName: IndexNameActions['setIndexName'];
+ updateConnectorConfiguration: PostConnectorConfigurationActions['makeRequest'];
+ updateConnectorConfigurationSuccess: PostConnectorConfigurationActions['apiSuccess'];
}
export interface ConnectorViewValues {
+ updateConnectorConfigurationStatus: Status;
connector: Connector | undefined;
connectorData: CachedFetchConnectorByIdApiLogicValues['connectorData'];
connectorError: string | undefined;
@@ -75,8 +80,6 @@ export const ConnectorViewLogic = kea ({
@@ -107,10 +117,10 @@ export const ConnectorViewLogic = kea ({
- fetchConnectorApiSuccess: (response) => {
- if (response.connector?.index_name) {
- actions.setIndexName(response.connector.index_name);
+ listeners: ({ actions, values }) => ({
+ updateConnectorConfigurationSuccess: () => {
+ if (values.connectorId) {
+ actions.fetchConnector({ connectorId: values.connectorId });
}
},
}),
From 22365e6d4a14e06c6de559bc98c117088ce4f37d Mon Sep 17 00:00:00 2001
From: Ievgen Sorokopud
Date: Tue, 12 Mar 2024 11:55:37 +0100
Subject: [PATCH 047/100] [Security Solution] Cannot edit, add or remove
filters on Custom Rule after upgrade to 8.12 (#177838) (#178207)
## Summary
Addresses https://github.com/elastic/kibana/issues/177838
These changes fix the bug where users do not receive UI feedback on
add/remove/edit filters inside security solution rules. It happens when
user selects data view as a source and works correctly with index
patterns.
The issue was introduced with these changes
https://github.com/elastic/kibana/pull/175433/files# where we update
filters with the ad-hoc data view id. Since new state variable is
updated only when current source is an index pattern.
**Fix**: we should always update `searchBarFilters` state variable on
source/filters updates.
https://github.com/elastic/kibana/assets/2700761/5d8d3932-3fc7-4a5c-a647-4fa2ceda71b2
Also, I added e2e tests to verify that we are able to add filters on
rule creation working with both source types.
### Checklist
Delete any items that are not applicable to this PR.
- [ ]
[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
- [x] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
- [x] [ESS 50
times](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5428)
- [x] [Serverless 50
times](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5410)
---------
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
.../common/components/query_bar/index.tsx | 26 ++++++++++++-------
.../rule_creation/custom_query_rule.cy.ts | 16 ++++++++++++
.../custom_query_rule_data_view.cy.ts | 16 ++++++++++++
.../cypress/screens/create_new_rule.ts | 3 +++
.../cypress/tasks/create_new_rule.ts | 11 +++++++-
5 files changed, 61 insertions(+), 11 deletions(-)
diff --git a/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx b/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx
index c71abe9b7f2f..a711e8e8e222 100644
--- a/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx
+++ b/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx
@@ -5,6 +5,7 @@
* 2.0.
*/
+import { cloneDeep } from 'lodash';
import React, { memo, useMemo, useCallback, useState, useEffect } from 'react';
import deepEqual from 'fast-deep-equal';
@@ -63,7 +64,6 @@ export const QueryBar = memo(
}) => {
const { data } = useKibana().services;
const [dataView, setDataView] = useState();
- const [searchBarFilters, setSearchBarFilters] = useState(filters);
const onQuerySubmit = useCallback(
(payload: { dateRange: TimeRange; query?: Query | AggregateQuery }) => {
if (payload.query != null && !deepEqual(payload.query, filterQuery)) {
@@ -129,14 +129,6 @@ export const QueryBar = memo(
const createDataView = async () => {
dv = await data.dataViews.create({ id: indexPattern.title, title: indexPattern.title });
setDataView(dv);
-
- /**
- * We update filters and set new data view id to make sure that SearchBar does not show data view picker
- * More details in https://github.com/elastic/kibana/issues/174026
- */
- const updatedFilters = [...filters];
- updatedFilters.forEach((filter) => (filter.meta.index = indexPattern.title));
- setSearchBarFilters(updatedFilters);
};
createDataView();
}
@@ -145,7 +137,21 @@ export const QueryBar = memo(
data.dataViews.clearInstanceCache(dv?.id);
}
};
- }, [data.dataViews, filters, indexPattern, isEsql]);
+ }, [data.dataViews, indexPattern, isEsql]);
+
+ const searchBarFilters = useMemo(() => {
+ if (isDataView(indexPattern) || isEsql) {
+ return filters;
+ }
+
+ /**
+ * We update filters and set new data view id to make sure that SearchBar does not show data view picker
+ * More details in https://github.com/elastic/kibana/issues/174026
+ */
+ const updatedFilters = cloneDeep(filters);
+ updatedFilters.forEach((filter) => (filter.meta.index = indexPattern.title));
+ return updatedFilters;
+ }, [filters, indexPattern, isEsql]);
const timeHistory = useMemo(() => new TimeHistory(new Storage(localStorage)), []);
const arrDataView = useMemo(() => (dataView != null ? [dataView] : []), [dataView]);
diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts
index d5918e21fa10..047d56980b85 100644
--- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts
+++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts
@@ -7,6 +7,7 @@
import { getNewRule } from '../../../../objects/rule';
import { RULE_NAME_HEADER } from '../../../../screens/rule_details';
+import { GLOBAL_SEARCH_BAR_FILTER_ITEM } from '../../../../screens/search_bar';
import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common';
import {
@@ -14,9 +15,12 @@ import {
fillAboutRuleMinimumAndContinue,
fillDefineCustomRuleAndContinue,
createRuleWithoutEnabling,
+ fillDefineCustomRule,
+ openAddFilterPopover,
} from '../../../../tasks/create_new_rule';
import { login } from '../../../../tasks/login';
import { visit } from '../../../../tasks/navigation';
+import { fillAddFilterForm } from '../../../../tasks/search_bar';
import { CREATE_RULE_URL } from '../../../../urls/navigation';
describe('Create custom query rule', { tags: ['@ess', '@serverless'] }, () => {
@@ -42,5 +46,17 @@ describe('Create custom query rule', { tags: ['@ess', '@serverless'] }, () => {
cy.log('Asserting we have a new rule created');
cy.get(RULE_NAME_HEADER).should('contain', rule.name);
});
+
+ it('Adds filter on define step', () => {
+ visit(CREATE_RULE_URL);
+ fillDefineCustomRule(rule);
+ openAddFilterPopover();
+ fillAddFilterForm({
+ key: 'host.name',
+ operator: 'exists',
+ });
+ // Check that newly added filter exists
+ cy.get(GLOBAL_SEARCH_BAR_FILTER_ITEM).should('have.text', 'host.name: exists');
+ });
});
});
diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule_data_view.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule_data_view.cy.ts
index e93a06dd3ca6..bbb34c7a7997 100644
--- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule_data_view.cy.ts
+++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule_data_view.cy.ts
@@ -47,6 +47,7 @@ import {
DATA_VIEW_DETAILS,
EDIT_RULE_SETTINGS_LINK,
} from '../../../../screens/rule_details';
+import { GLOBAL_SEARCH_BAR_FILTER_ITEM } from '../../../../screens/search_bar';
import {
getRulesManagementTableRows,
@@ -61,8 +62,10 @@ import {
createAndEnableRule,
createRuleWithoutEnabling,
fillAboutRuleAndContinue,
+ fillDefineCustomRule,
fillDefineCustomRuleAndContinue,
fillScheduleRuleAndContinue,
+ openAddFilterPopover,
waitForAlertsToPopulate,
} from '../../../../tasks/create_new_rule';
@@ -70,6 +73,7 @@ import { login } from '../../../../tasks/login';
import { visit } from '../../../../tasks/navigation';
import { openRuleManagementPageViaBreadcrumbs } from '../../../../tasks/rules_management';
import { getDetails, waitForTheRuleToBeExecuted } from '../../../../tasks/rule_details';
+import { fillAddFilterForm } from '../../../../tasks/search_bar';
import { CREATE_RULE_URL } from '../../../../urls/navigation';
@@ -176,5 +180,17 @@ describe('Custom query rules', { tags: ['@ess', '@serverless'] }, () => {
cy.get(RULE_NAME_HEADER).should('contain', 'Edit rule settings');
});
+
+ it('Adds filter on define step', () => {
+ visit(CREATE_RULE_URL);
+ fillDefineCustomRule(rule);
+ openAddFilterPopover();
+ fillAddFilterForm({
+ key: 'host.name',
+ operator: 'exists',
+ });
+ // Check that newly added filter exists
+ cy.get(GLOBAL_SEARCH_BAR_FILTER_ITEM).should('have.text', 'host.name: exists');
+ });
});
});
diff --git a/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts b/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts
index 0b521f68a787..992b93713577 100644
--- a/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts
+++ b/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts
@@ -60,6 +60,9 @@ export const CUSTOM_QUERY_INPUT = '[data-test-subj="queryInput"]';
export const CUSTOM_QUERY_BAR = '[data-test-subj="detectionEngineStepDefineRuleQueryBar"]';
+export const QUERY_BAR_ADD_FILTER =
+ '[data-test-subj="detectionEngineStepDefineRuleQueryBar"] [data-test-subj="addFilter"]';
+
export const THREAT_MAPPING_COMBO_BOX_INPUT =
'[data-test-subj="threatMatchInput"] [data-test-subj="fieldAutocompleteComboBox"]';
diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts
index 62091e0e39a5..c0d40a7bd764 100644
--- a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts
+++ b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts
@@ -122,6 +122,7 @@ import {
RULE_INDICES,
ALERTS_INDEX_BUTTON,
INVESTIGATIONS_INPUT,
+ QUERY_BAR_ADD_FILTER,
} from '../screens/create_new_rule';
import {
INDEX_SELECTOR,
@@ -408,7 +409,7 @@ export const removeAlertsIndex = () => {
});
};
-export const fillDefineCustomRuleAndContinue = (rule: QueryRuleCreateProps) => {
+export const fillDefineCustomRule = (rule: QueryRuleCreateProps) => {
if (rule.data_view_id !== undefined) {
cy.get(DATA_VIEW_OPTION).click();
cy.get(DATA_VIEW_COMBO_BOX).type(`${rule.data_view_id}{enter}`);
@@ -416,6 +417,10 @@ export const fillDefineCustomRuleAndContinue = (rule: QueryRuleCreateProps) => {
cy.get(CUSTOM_QUERY_INPUT)
.first()
.type(rule.query || '');
+};
+
+export const fillDefineCustomRuleAndContinue = (rule: QueryRuleCreateProps) => {
+ fillDefineCustomRule(rule);
cy.get(DEFINE_CONTINUE_BUTTON).should('exist').click({ force: true });
};
@@ -878,3 +883,7 @@ export const uncheckLoadQueryDynamically = () => {
cy.get(LOAD_QUERY_DYNAMICALLY_CHECKBOX).click({ force: true });
cy.get(LOAD_QUERY_DYNAMICALLY_CHECKBOX).should('not.be.checked');
};
+
+export const openAddFilterPopover = () => {
+ cy.get(QUERY_BAR_ADD_FILTER).click();
+};
From ddc82a20f208f69064d6f53169aec7ebba125671 Mon Sep 17 00:00:00 2001
From: Bena Kansara <69037875+benakansara@users.noreply.github.com>
Date: Tue, 12 Mar 2024 12:00:19 +0100
Subject: [PATCH 048/100] [APM] [Alerts] Fix error rendering alerts table in
APM app (#178371)
Fixes https://github.com/elastic/kibana/issues/178286
---
.../cypress/e2e/alerts/error_count.cy.ts | 102 ++++++++++++++++++
.../cypress/e2e/alerts/generate_data.ts | 50 +++++++++
.../observability_solution/apm/kibana.jsonc | 3 +-
3 files changed, 154 insertions(+), 1 deletion(-)
create mode 100644 x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/error_count.cy.ts
create mode 100644 x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/generate_data.ts
diff --git a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/error_count.cy.ts b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/error_count.cy.ts
new file mode 100644
index 000000000000..39eab697bbbf
--- /dev/null
+++ b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/error_count.cy.ts
@@ -0,0 +1,102 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { synthtrace } from '../../../synthtrace';
+import { generateData } from './generate_data';
+
+function deleteAllRules() {
+ cy.log('Delete all rules');
+ cy.request({
+ log: false,
+ method: 'GET',
+ url: '/api/alerting/rules/_find',
+ auth: { user: 'editor', pass: 'changeme' },
+ }).then(({ body }) => {
+ if (body.data.length > 0) {
+ cy.log(`Deleting rules`);
+ }
+
+ body.data.map(({ id }: { id: string }) => {
+ cy.request({
+ headers: { 'kbn-xsrf': 'true' },
+ log: false,
+ method: 'DELETE',
+ url: `/api/alerting/rule/${id}`,
+ auth: { user: 'editor', pass: 'changeme' },
+ });
+ });
+ });
+}
+
+describe('Alerts', () => {
+ beforeEach(() => {
+ deleteAllRules();
+ });
+
+ after(() => {
+ deleteAllRules();
+ });
+
+ before(() => {
+ const start = Date.now() - 1000 * 60 * 10;
+ const end = Date.now() + 1000 * 60 * 5;
+
+ synthtrace.index(
+ generateData({
+ from: new Date(start).getTime(),
+ to: new Date(end).getTime(),
+ })
+ );
+ });
+
+ after(() => {
+ synthtrace.clean();
+ });
+
+ describe('when rendered from Service view in APM app', () => {
+ const ruleName = 'Error count threshold';
+ const confirmModalButtonSelector =
+ '.euiModal button[data-test-subj=confirmModalConfirmButton]';
+
+ it('alerts table is rendered correctly', () => {
+ cy.loginAsEditorUser();
+
+ // Create a rule in APM
+ cy.visitKibana('/app/apm/services');
+ cy.contains('Alerts and rules').click();
+ cy.contains('Create error count rule').click();
+
+ // Check for the existence of these elements to make sure the form
+ // has loaded.
+ cy.contains('for the last');
+ cy.contains('Actions');
+ cy.contains('Save').should('not.be.disabled');
+
+ // Update "Is above" to "0"
+ cy.contains('is above').click();
+ cy.getByTestSubj('apmIsAboveFieldFieldNumber').clear();
+ cy.contains('is above 0 errors');
+
+ // Save, with no actions
+ cy.contains('Save').click();
+ cy.get(confirmModalButtonSelector).click();
+
+ cy.contains(`Created rule "${ruleName}`);
+
+ // Check that the "Alerts" table is loaded
+ cy.wait(2000);
+ cy.visitKibana('/app/apm/services/opbeans-java/alerts');
+ cy.getByTestSubj('o11yGetRenderCellValueLink')
+ .first()
+ .click({ force: true });
+ cy.getByTestSubj('alertsFlyout').should('exist');
+ cy.contains('Overview');
+ cy.contains('Status');
+ cy.contains('Active');
+ });
+ });
+});
diff --git a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/generate_data.ts b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/generate_data.ts
new file mode 100644
index 000000000000..e50e334a628d
--- /dev/null
+++ b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/generate_data.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { apm, timerange } from '@kbn/apm-synthtrace-client';
+
+export function generateData({ from, to }: { from: number; to: number }) {
+ const range = timerange(from, to);
+
+ const opbeansJava = apm
+ .service({
+ name: 'opbeans-java',
+ environment: 'production',
+ agentName: 'java',
+ })
+ .instance('opbeans-java-prod-1')
+ .podId('opbeans-java-prod-1-pod');
+
+ const opbeansNode = apm
+ .service({
+ name: 'opbeans-node',
+ environment: 'production',
+ agentName: 'nodejs',
+ })
+ .instance('opbeans-node-prod-1');
+
+ return range
+ .interval('2m')
+ .rate(1)
+ .generator((timestamp, index) => [
+ opbeansJava
+ .transaction({ transactionName: 'GET /apple 🍎 ' })
+ .timestamp(timestamp)
+ .duration(1000)
+ .success()
+ .errors(
+ opbeansJava
+ .error({ message: `Error ${index}`, type: `exception ${index}` })
+ .timestamp(timestamp)
+ ),
+ opbeansNode
+ .transaction({ transactionName: 'GET /banana 🍌' })
+ .timestamp(timestamp)
+ .duration(500)
+ .success(),
+ ]);
+}
diff --git a/x-pack/plugins/observability_solution/apm/kibana.jsonc b/x-pack/plugins/observability_solution/apm/kibana.jsonc
index fb50d31acdcf..c46afe508c45 100644
--- a/x-pack/plugins/observability_solution/apm/kibana.jsonc
+++ b/x-pack/plugins/observability_solution/apm/kibana.jsonc
@@ -48,7 +48,8 @@
"usageCollection",
"customIntegrations", // Move this to requiredPlugins after completely migrating from the Tutorials Home App
"licenseManagement",
- "profilingDataAccess"
+ "profilingDataAccess",
+ "cases"
],
"requiredBundles": [
"fleet",
From 1457fcd4c46cf22d77d1aa65af99c526573d73d0 Mon Sep 17 00:00:00 2001
From: Alexey Antonov
Date: Tue, 12 Mar 2024 13:12:29 +0200
Subject: [PATCH 049/100] fix: [Dashboard > Overview][AXE-CORE]: Select menus
must have accessible labels (#177837)
Closes: https://github.com/elastic/security-team/issues/8556
## Description
The [axe browser plugin](https://deque.com/axe) is reporting two select
menus without accessible labels.
### Steps to recreate
1. Open the Security Dashboards, then click
[Overview](https://kibana.siem.estc.dev/app/security/overview)
2. Run an axe browser scan in Chrome, Edge, or Firefox
3. Verify the Critical issue "Select element must have an accessible
name"
### What was done
- Added required `a11y` attributes
### Screens
#### Axe report
![image](https://github.com/elastic/kibana/assets/20072247/a79347ca-edda-42e6-873f-b87ecbab0216)
---------
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
.../cases/public/components/recent_cases/filters/index.tsx | 1 +
.../public/common/components/matrix_histogram/index.tsx | 1 +
2 files changed, 2 insertions(+)
diff --git a/x-pack/plugins/cases/public/components/recent_cases/filters/index.tsx b/x-pack/plugins/cases/public/components/recent_cases/filters/index.tsx
index e50f0df9d0f4..5478f5b91882 100644
--- a/x-pack/plugins/cases/public/components/recent_cases/filters/index.tsx
+++ b/x-pack/plugins/cases/public/components/recent_cases/filters/index.tsx
@@ -67,6 +67,7 @@ export const RecentCasesFilters = React.memo<{
onChange={onChange}
options={options}
value={filterBy}
+ aria-label={i18n.RECENT_CASES}
/>
);
});
diff --git a/x-pack/plugins/security_solution/public/common/components/matrix_histogram/index.tsx b/x-pack/plugins/security_solution/public/common/components/matrix_histogram/index.tsx
index 58f1736e1379..28615317c5d8 100644
--- a/x-pack/plugins/security_solution/public/common/components/matrix_histogram/index.tsx
+++ b/x-pack/plugins/security_solution/public/common/components/matrix_histogram/index.tsx
@@ -341,6 +341,7 @@ export const MatrixHistogramComponent: React.FC =
options={stackByOptions}
prepend={i18n.STACK_BY}
value={selectedStackByOption?.value}
+ aria-label={i18n.STACK_BY}
/>
)}
From e7c2c187e11e37acee0af567d16b99846ecb7bd1 Mon Sep 17 00:00:00 2001
From: Jean-Louis Leysens
Date: Tue, 12 Mar 2024 12:21:53 +0100
Subject: [PATCH 050/100] Rename `ModelVersionTestKit` utility (#178077)
## Summary
`tearsDown` -> `tearDown`
---
.../core/saved-objects-service-use-case-examples.asciidoc | 2 +-
.../core-saved-objects-server/docs/model_versions.md | 2 +-
.../core-test-helpers-model-versions/src/test_bed/test_bed.ts | 2 +-
.../core-test-helpers-model-versions/src/test_bed/test_kit.ts | 4 ++--
.../core-test-helpers-model-versions/src/test_bed/types.ts | 2 +-
5 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc b/docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc
index 2b2cbde0b3f1..cf6af235e88a 100644
--- a/docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc
+++ b/docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc
@@ -687,7 +687,7 @@ describe('myIntegrationTest', () => {
afterEach(async () => {
if(testkit) {
// delete the indices between each tests to perform a migration again
- await testkit.tearsDown();
+ await testkit.tearDown();
}
});
diff --git a/packages/core/saved-objects/core-saved-objects-server/docs/model_versions.md b/packages/core/saved-objects/core-saved-objects-server/docs/model_versions.md
index 31229e5eebc9..2790a2ebc820 100644
--- a/packages/core/saved-objects/core-saved-objects-server/docs/model_versions.md
+++ b/packages/core/saved-objects/core-saved-objects-server/docs/model_versions.md
@@ -988,7 +988,7 @@ describe('myIntegrationTest', () => {
afterEach(async () => {
if(testkit) {
// delete the indices between each tests to perform a migration again
- await testkit.tearsDown();
+ await testkit.tearDown();
}
});
diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_bed.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_bed.ts
index aa8c4ab8df42..b3c22325f1de 100644
--- a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_bed.ts
+++ b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_bed.ts
@@ -40,7 +40,7 @@ import type { ModelVersionTestBed } from './types';
*
* afterEach(async () => {
* if(testkit) {
- * await testkit.tearsDown();
+ * await testkit.tearDown();
* }
* });
*
diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts
index ee33208d793c..f986bb185cc4 100644
--- a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts
+++ b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts
@@ -121,7 +121,7 @@ export const prepareModelVersionTestKit = async ({
await runMigrations(secondMigrator);
- const tearsDown = async () => {
+ const tearDown = async () => {
await esClient.indices.delete({ index: `${kibanaIndex}_*`, allow_no_indices: true });
};
@@ -129,7 +129,7 @@ export const prepareModelVersionTestKit = async ({
esClient,
repositoryBefore,
repositoryAfter,
- tearsDown,
+ tearDown,
};
};
diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts
index 37f22a297ee3..0e2e04a7bc6c 100644
--- a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts
+++ b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts
@@ -121,7 +121,7 @@ export interface ModelVersionTestKit {
* Cleanup function that will delete the test index.
* Should be called before calling `testbed.prepareTestKit` again.
*/
- tearsDown: () => Promise;
+ tearDown: () => Promise;
}
/**
From 283b4505346de721fc50268ac6b44cb588aefcf1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tim=20R=C3=BChsen?=
Date: Tue, 12 Mar 2024 12:49:08 +0100
Subject: [PATCH 051/100] Fix CO2/cost values in diff flamegraph tooltip
(#178481)
Fixes the wrong CO2 and cost values shown in the differential flamegraph
tooltip.
**example of wrong tooltip values**
![Screenshot_20240312_084224](https://github.com/elastic/kibana/assets/2087964/a13f4cf1-5d4b-4ff1-8569-be7e29338a7b)
---
.../profiling/public/components/flamegraph/index.tsx | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/index.tsx b/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/index.tsx
index 38fa7273bc1a..b3dfb877963c 100644
--- a/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/index.tsx
+++ b/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/index.tsx
@@ -194,12 +194,8 @@ export function FlameGraph({
primaryFlamegraph.TotalAnnualCostsUSDItems[valueIndex]
}
baselineScaleFactor={baseline}
- comparisonAnnualCO2KgsInclusive={
- comparisonFlamegraph?.TotalAnnualCO2KgsItems[valueIndex]
- }
- comparisonAnnualCostsUSDInclusive={
- comparisonFlamegraph?.TotalAnnualCostsUSDItems[valueIndex]
- }
+ comparisonAnnualCO2KgsInclusive={comparisonNode.TotalAnnualCO2Kgs}
+ comparisonAnnualCostsUSDInclusive={comparisonNode?.TotalAnnualCostUSD}
comparisonCountExclusive={comparisonNode?.CountExclusive}
comparisonCountInclusive={comparisonNode?.CountInclusive}
comparisonScaleFactor={comparison}
From 525d8aa9f357dd87992c0f758be64f21f843790d Mon Sep 17 00:00:00 2001
From: Jean-Louis Leysens
Date: Tue, 12 Mar 2024 12:59:27 +0100
Subject: [PATCH 052/100] [Serverless] Fix potential issues when re-running
telemetry config tests (#178416)
## Summary
Telemetry tests in:
-
`x-pack/test_serverless/api_integration/test_suites/search/telemetry/telemetry_config.ts`
-
`x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts`
-
`x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts`
...set global config values and thus are not safe for re-runs. Altered
state changes preconditions leading to possible assertion failures.
This PR updates the tests to rather use `.toMatchObject` where
appropriate rather than asserting against the full shape of the object.
In this way tests can re-run while preserving the essence of the
assertions.
## Notes
Unfortunately I can't see a way to reset/cleanup the value of
`telemetry.labels.journeyName` using the `/internal/core/_settings` API.
This would be the proper fix and should come in a follow up PR.
---
.../test_suites/observability/telemetry/telemetry_config.ts | 6 ++++--
.../test_suites/security/telemetry/telemetry_config.ts | 6 ++++--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts b/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts
index d803cf06b4c5..78732f6b5282 100644
--- a/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts
+++ b/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts
@@ -5,6 +5,7 @@
* 2.0.
*/
+import { expect } from 'expect';
import { FtrProviderContext } from '../../../ftr_provider_context';
export default function telemetryConfigTest({ getService }: FtrProviderContext) {
@@ -23,10 +24,11 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext)
};
it('GET should get the default config', async () => {
- await supertest
+ const { body } = await supertest
.get('/api/telemetry/v2/config')
.set(svlCommonApi.getCommonRequestHeader())
- .expect(200, baseConfig);
+ .expect(200);
+ expect(body).toMatchObject(baseConfig);
});
it('GET should get updated labels after dynamically updating them', async () => {
diff --git a/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts b/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts
index 2be964bc579b..41a02950c4f0 100644
--- a/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts
+++ b/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts
@@ -5,6 +5,7 @@
* 2.0.
*/
+import { expect } from 'expect';
import { FtrProviderContext } from '../../../ftr_provider_context';
export default function telemetryConfigTest({ getService }: FtrProviderContext) {
@@ -23,10 +24,11 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext)
};
it('GET should get the default config', async () => {
- await supertest
+ const { body } = await supertest
.get('/api/telemetry/v2/config')
.set(svlCommonApi.getCommonRequestHeader())
- .expect(200, baseConfig);
+ .expect(200);
+ expect(body).toMatchObject(baseConfig);
});
it('GET should get updated labels after dynamically updating them', async () => {
From 24f6907a072ec7fd82eab7f1528ed29f2b9e7e03 Mon Sep 17 00:00:00 2001
From: Dzmitry Lemechko
Date: Tue, 12 Mar 2024 13:13:03 +0100
Subject: [PATCH 053/100] [kbn-journey] keep ES data b/w test & warmup runs
(#178388)
## Summary
When we run journey to collect EBT/AMP metrics as part of performace
pipeline, we use the `scripts/run_performance.js` script, that does the
following:
1. Start Elasticsearch
2. Start Kibana with APM on / EBT off, run the journey scenario, stop
Kibana
3. Start Kibana again with both APM/EBT on, run journey scenario, stop
Kibana
4. Stop Elasticsearch
Step 3 is where the monitoring metrics are collected. Step 2 is only to
"warmup" ES, experimentally proved that metrics are more consistent when
we run the journey 2 times.
On the other hand journey lifecycle has `before` & `after` hooks that
handle test data adding/removing and it doesn't help to unload ES data
after WARMUP phase and load again before TEST one.
Still journey can and is run as a functional test, so we need to keep
"cleanup" for when it is run locally e.g. to debug the test flow not the
metrics collection.
Relying on TEST_PERFORMANCE_PHASE env var that is set only during
performance run, this PR makes a change to avoid unloading ES data after
warmup and ingest data before test only if index was deleted (*should
never happen, but for validation purpose). This way we ingest data to
Elasticsearch only one time.
---
.../kbn-journeys/journey/journey_ftr_harness.ts | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/packages/kbn-journeys/journey/journey_ftr_harness.ts b/packages/kbn-journeys/journey/journey_ftr_harness.ts
index 7becb99f3970..4b1a69757067 100644
--- a/packages/kbn-journeys/journey/journey_ftr_harness.ts
+++ b/packages/kbn-journeys/journey/journey_ftr_harness.ts
@@ -58,6 +58,10 @@ export class JourneyFtrHarness {
private apm: apmNode.Agent | null = null;
+ // journey can be run to collect EBT/APM metrics or just as a functional test
+ // TEST_PERFORMANCE_PHASE is defined via scripts/run_perfomance.js run only
+ private readonly isPerformanceRun = process.env.TEST_PERFORMANCE_PHASE || false;
+
// Update the Telemetry and APM global labels to link traces with journey
private async updateTelemetryAndAPMLabels(labels: { [k: string]: string }) {
this.log.info(`Updating telemetry & APM labels: ${JSON.stringify(labels)}`);
@@ -162,7 +166,12 @@ export class JourneyFtrHarness {
// Loading test data
await Promise.all([
asyncForEach(this.journeyConfig.getEsArchives(), async (esArchive) => {
- await this.esArchiver.load(esArchive);
+ if (this.isPerformanceRun) {
+ // we start Elasticsearch only once and keep ES data persisitent.
+ await this.esArchiver.loadIfNeeded(esArchive);
+ } else {
+ await this.esArchiver.load(esArchive);
+ }
}),
asyncForEach(this.journeyConfig.getKbnArchives(), async (kbnArchive) => {
await this.kibanaServer.importExport.load(kbnArchive);
@@ -233,7 +242,10 @@ export class JourneyFtrHarness {
await this.teardownApm();
await Promise.all([
asyncForEach(this.journeyConfig.getEsArchives(), async (esArchive) => {
- await this.esArchiver.unload(esArchive);
+ // Keep ES data when journey is run twice (avoid unload after "Warmup" phase)
+ if (!this.isPerformanceRun) {
+ await this.esArchiver.unload(esArchive);
+ }
}),
asyncForEach(this.journeyConfig.getKbnArchives(), async (kbnArchive) => {
await this.kibanaServer.importExport.unload(kbnArchive);
From 88ce4d5f2a9cc6996fefdde4f891a350dd318a8d Mon Sep 17 00:00:00 2001
From: Jon
Date: Tue, 12 Mar 2024 07:18:49 -0500
Subject: [PATCH 054/100] [ci] Upgrade axios (#178452)
---
.buildkite/package-lock.json | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/.buildkite/package-lock.json b/.buildkite/package-lock.json
index 5b19d688aa3f..523decc3f270 100644
--- a/.buildkite/package-lock.json
+++ b/.buildkite/package-lock.json
@@ -351,11 +351,11 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz",
- "integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==",
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz",
+ "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==",
"dependencies": {
- "follow-redirects": "^1.15.0",
+ "follow-redirects": "^1.15.4",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
@@ -2001,11 +2001,11 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"axios": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz",
- "integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==",
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz",
+ "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==",
"requires": {
- "follow-redirects": "^1.15.0",
+ "follow-redirects": "^1.15.4",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
From 71665d9d8fd61ac152e778af124efaa02f8dcfff Mon Sep 17 00:00:00 2001
From: Sander Philipse <94373878+sphilipse@users.noreply.github.com>
Date: Tue, 12 Mar 2024 13:34:55 +0100
Subject: [PATCH 055/100] [Search] Show attach index box on connectors pages
(#178487)
## Summary
This fixes an issue where the attach index box would never show up.
---
.../components/connector_detail/attach_index_box.tsx | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx
index b9fa42122a82..93f14f89259b 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx
@@ -39,7 +39,7 @@ export interface AttachIndexBoxProps {
}
export const AttachIndexBox: React.FC = ({ connector }) => {
- const indexName = decodeURIComponent(useParams<{ indexName: string }>().indexName);
+ const { indexName } = useParams<{ indexName: string }>();
const { createIndex, attachIndex, setConnector, checkIndexExists } = useActions(AttachIndexLogic);
const {
isLoading: isSaveLoading,
@@ -116,7 +116,6 @@ export const AttachIndexBox: React.FC = ({ connector }) =>
}
)
: attachApiError?.body?.message || createApiError?.body?.message || undefined;
-
if (indexName) {
// We don't want to let people edit indices when on the index route
return <>>;
From 04eabfc98f2f09304ea842f4e2787a747a4966ae Mon Sep 17 00:00:00 2001
From: Chris Cowan
Date: Tue, 12 Mar 2024 07:31:43 -0600
Subject: [PATCH 056/100] [SLO] Fix bug with 'View events' feature to filter on
group-by fields (#178260)
## Summary
This PR fixes #178231 by adding filters for the group by values. This
also fixes a bug where the Discover time picker was missing due to the
incompatible data view ID.
### Testing
1. Create an SLO (Custom KQL) with a group by (or multiple)
2. Visit the SLO detail page
3. Click on the "View events"
You should see filters for each of the group bys along with disabled
filters for "Good events" and "Bad events"
---
.../public/utils/slo/get_discover_link.ts | 65 +++++++++++++++++--
1 file changed, 60 insertions(+), 5 deletions(-)
diff --git a/x-pack/plugins/observability_solution/observability/public/utils/slo/get_discover_link.ts b/x-pack/plugins/observability_solution/observability/public/utils/slo/get_discover_link.ts
index cc21bd6944fa..b391e286104d 100644
--- a/x-pack/plugins/observability_solution/observability/public/utils/slo/get_discover_link.ts
+++ b/x-pack/plugins/observability_solution/observability/public/utils/slo/get_discover_link.ts
@@ -5,9 +5,11 @@
* 2.0.
*/
import { DiscoverStart } from '@kbn/discover-plugin/public';
-import { kqlWithFiltersSchema, SLOWithSummaryResponse } from '@kbn/slo-schema';
+import { ALL_VALUE, kqlWithFiltersSchema, SLOWithSummaryResponse } from '@kbn/slo-schema';
import { Filter, FilterStateStore, TimeRange } from '@kbn/es-query';
import { i18n } from '@kbn/i18n';
+import { v4 } from 'uuid';
+import { isEmpty } from 'lodash';
import { buildEsQuery } from '../build_es_query';
function createDiscoverLocator(
@@ -16,6 +18,7 @@ function createDiscoverLocator(
showGood = false,
timeRange?: TimeRange
) {
+ const indexId = v4();
const filters: Filter[] = [];
if (kqlWithFiltersSchema.is(slo.indicator.params.filter)) {
@@ -33,8 +36,15 @@ function createDiscoverLocator(
const goodFilters = kqlWithFiltersSchema.is(slo.indicator.params.good)
? slo.indicator.params.good.filters
: [];
+ const totalKuery = kqlWithFiltersSchema.is(slo.indicator.params.total)
+ ? slo.indicator.params.total.kqlQuery
+ : slo.indicator.params.total;
+ const totalFilters = kqlWithFiltersSchema.is(slo.indicator.params.total)
+ ? slo.indicator.params.total.filters
+ : [];
const customGoodFilter = buildEsQuery({ kuery: goodKuery, filters: goodFilters });
- const customBadFilter = { bool: { must_not: customGoodFilter } };
+ const customTotalFilter = buildEsQuery({ kuery: totalKuery, filters: totalFilters });
+ const customBadFilter = { bool: { filter: customTotalFilter, must_not: customGoodFilter } };
filters.push({
$state: { store: FilterStateStore.APP_STATE },
@@ -44,8 +54,8 @@ function createDiscoverLocator(
defaultMessage: 'Good events',
}),
disabled: !showGood,
- index: `${slo.indicator.params.index}-id`,
value: JSON.stringify(customGoodFilter),
+ index: indexId,
},
query: customGoodFilter as Record,
});
@@ -58,11 +68,56 @@ function createDiscoverLocator(
defaultMessage: 'Bad events',
}),
disabled: !showBad,
- index: `${slo.indicator.params.index}-id`,
value: JSON.stringify(customBadFilter),
+ index: indexId,
},
query: customBadFilter as Record,
});
+
+ filters.push({
+ $state: { store: FilterStateStore.APP_STATE },
+ meta: {
+ type: 'custom',
+ alias: i18n.translate('xpack.observability.slo.sloDetails.totalFilterLabel', {
+ defaultMessage: 'Total events',
+ }),
+ value: JSON.stringify(customBadFilter),
+ index: indexId,
+ },
+ query: customTotalFilter as Record,
+ });
+ }
+
+ const groupBy = [slo.groupBy].flat();
+
+ if (
+ !isEmpty(slo.groupings) &&
+ groupBy.length > 0 &&
+ groupBy.every((field) => field === ALL_VALUE) === false
+ ) {
+ groupBy.forEach((field) => {
+ filters.push({
+ meta: {
+ disabled: false,
+ negate: false,
+ alias: null,
+ key: field,
+ params: {
+ query: slo.groupings[field],
+ },
+ type: 'phrase',
+ index: indexId,
+ },
+ $state: {
+ store: FilterStateStore.APP_STATE,
+ },
+ query: {
+ match_phrase: {
+ [field]: slo.groupings[field],
+ },
+ },
+ });
+ });
}
const timeFieldName =
@@ -80,7 +135,7 @@ function createDiscoverLocator(
},
filters,
dataViewSpec: {
- id: `${slo.indicator.params.index}-id`,
+ id: indexId,
title: slo.indicator.params.index,
timeFieldName,
},
From abf0937d2dd389465cb954f67c0838e198d353a9 Mon Sep 17 00:00:00 2001
From: Yngrid Coello
Date: Tue, 12 Mar 2024 15:30:50 +0100
Subject: [PATCH 057/100] [Dataset quality] Added beta tag to page header
(#177613)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes https://github.com/elastic/kibana/issues/177602.
## 📝 Summary
This PR introduces a `beta` badge next to page title.
## 🎥 Demos
https://github.com/elastic/kibana/assets/1313018/35fe6919-10bd-49a3-bbd5-a4968d784b8b
---
.../components/dataset_quality/header.tsx | 38 ++++++++++++++++++-
1 file changed, 36 insertions(+), 2 deletions(-)
diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/header.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/header.tsx
index 51684cd64107..494d3f324f27 100644
--- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/header.tsx
+++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/header.tsx
@@ -5,12 +5,46 @@
* 2.0.
*/
-import { EuiPageHeader } from '@elastic/eui';
+import {
+ EuiBetaBadge,
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiPageHeader,
+ EuiPageHeaderSection,
+ EuiText,
+} from '@elastic/eui';
+import { i18n } from '@kbn/i18n';
import React from 'react';
import { datasetQualityAppTitle } from '../../../common/translations';
+export const betaBadgeLabel = i18n.translate('xpack.datasetQuality.betaBadgeLabel', {
+ defaultMessage: 'Beta',
+});
+
+export const betaBadgeDescription = i18n.translate('xpack.datasetQuality.betaBadgeDescription', {
+ defaultMessage:
+ 'This feature is currently in beta. If you encounter any bugs or have feedback, we’d love to hear from you. Please open a support issue and/or visit our discussion forum.',
+});
+
// Allow for lazy loading
// eslint-disable-next-line import/no-default-export
export default function Header() {
- return ;
+ return (
+
+
+
+
+ {datasetQualityAppTitle}
+
+
+
+
+
+
+
+ );
}
From 62da8be6f635896625d7702a5ed264bcf8c83f38 Mon Sep 17 00:00:00 2001
From: Jon
Date: Tue, 12 Mar 2024 09:36:02 -0500
Subject: [PATCH 058/100] Skip tests failing on Chrome 121+ (#175740)
Skipped tests have been forwarded to their corresponding teams for
triage. See
https://github.com/elastic/kibana/issues/176882#issuecomment-1991647927
for more information.
---------
Co-authored-by: Tiago Costa
---
test/functional/apps/dashboard/group5/embed_mode.ts | 3 ++-
test/functional/apps/discover/group1/_discover.ts | 3 ++-
test/functional/apps/discover/group1/_url_state.ts | 3 ++-
x-pack/test/functional/apps/lens/group6/workspace_size.ts | 3 ++-
.../apps/maps/group1/documents_source/search_hits.js | 3 ++-
x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js | 3 ++-
x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts | 3 ++-
.../functional/test_suites/common/discover/group1/_discover.ts | 3 ++-
.../test_suites/common/discover/group1/_discover_histogram.ts | 3 ++-
.../common/discover_ml_uptime/discover/search_source_alert.ts | 3 ++-
10 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/test/functional/apps/dashboard/group5/embed_mode.ts b/test/functional/apps/dashboard/group5/embed_mode.ts
index 25eabca77f71..d8ff2f42a3a3 100644
--- a/test/functional/apps/dashboard/group5/embed_mode.ts
+++ b/test/functional/apps/dashboard/group5/embed_mode.ts
@@ -24,7 +24,8 @@ export default function ({
const screenshot = getService('screenshots');
const log = getService('log');
- describe('embed mode', () => {
+ // Failing: See https://github.com/elastic/kibana/issues/176882
+ describe.skip('embed mode', () => {
/*
* Note: The baseline images used in all of the screenshot tests in this test suite were taken directly from the CI environment
* in order to overcome a known issue with the pixel density of fonts being significantly different when running locally versus
diff --git a/test/functional/apps/discover/group1/_discover.ts b/test/functional/apps/discover/group1/_discover.ts
index c931187250cc..3885230c861c 100644
--- a/test/functional/apps/discover/group1/_discover.ts
+++ b/test/functional/apps/discover/group1/_discover.ts
@@ -31,7 +31,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
defaultIndex: 'logstash-*',
};
- describe('discover test', function describeIndexTests() {
+ // Failing: See https://github.com/elastic/kibana/issues/176882
+ describe.skip('discover test', function describeIndexTests() {
before(async function () {
log.debug('load kibana index with default index pattern');
await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover');
diff --git a/test/functional/apps/discover/group1/_url_state.ts b/test/functional/apps/discover/group1/_url_state.ts
index e97ac332e8b6..95ef40a58698 100644
--- a/test/functional/apps/discover/group1/_url_state.ts
+++ b/test/functional/apps/discover/group1/_url_state.ts
@@ -35,7 +35,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
hideAnnouncements: true,
};
- describe('discover URL state', () => {
+ // Failing: See https://github.com/elastic/kibana/issues/176882
+ describe.skip('discover URL state', () => {
before(async function () {
log.debug('load kibana index with default index pattern');
await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover');
diff --git a/x-pack/test/functional/apps/lens/group6/workspace_size.ts b/x-pack/test/functional/apps/lens/group6/workspace_size.ts
index 165b429b0373..9f3706203abb 100644
--- a/x-pack/test/functional/apps/lens/group6/workspace_size.ts
+++ b/x-pack/test/functional/apps/lens/group6/workspace_size.ts
@@ -15,7 +15,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const retry = getService('retry');
const log = getService('log');
- describe('lens workspace size', () => {
+ // Failing: See https://github.com/elastic/kibana/issues/176882
+ describe.skip('lens workspace size', () => {
let originalWindowSize: {
height: number;
width: number;
diff --git a/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js b/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js
index 0273441f3543..6c91ec958ddf 100644
--- a/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js
+++ b/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js
@@ -12,7 +12,8 @@ export default function ({ getPageObjects, getService }) {
const inspector = getService('inspector');
const security = getService('security');
- describe('search hits', () => {
+ // Failing: See https://github.com/elastic/kibana/issues/176882
+ describe.skip('search hits', () => {
before(async () => {
await security.testUser.setRoles(
[
diff --git a/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js b/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js
index 49c31f951d3d..7ee28e468cd4 100644
--- a/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js
+++ b/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js
@@ -13,7 +13,8 @@ export default function ({ getPageObjects, getService }) {
const DOC_COUNT_PROP_NAME = 'doc_count';
const security = getService('security');
- describe('geojson vector layer - es geo grid source', () => {
+ // Failing: See https://github.com/elastic/kibana/issues/176882
+ describe.skip('geojson vector layer - es geo grid source', () => {
const DATA_CENTER_LON = -98;
const DATA_CENTER_LAT = 38;
diff --git a/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts b/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts
index a3ef0eddef6c..f7f2f669bc20 100644
--- a/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts
+++ b/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts
@@ -85,7 +85,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await ml.dataDrift.runAnalysis();
}
- describe('data drift', async function () {
+ // Failing: See https://github.com/elastic/kibana/issues/176882
+ describe.skip('data drift', async function () {
before(async () => {
await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/ihp_outlier');
await ml.testResources.createDataViewIfNeeded('ft_ihp_outlier');
diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts
index a5274115cfba..ffc9b434ebe3 100644
--- a/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts
+++ b/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts
@@ -31,7 +31,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
defaultIndex: 'logstash-*',
};
- describe('discover test', function describeIndexTests() {
+ // Failing: See https://github.com/elastic/kibana/issues/176882
+ describe.skip('discover test', function describeIndexTests() {
before(async function () {
log.debug('load kibana index with default index pattern');
await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover');
diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover_histogram.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover_histogram.ts
index 88de8194db3e..a02365ed056e 100644
--- a/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover_histogram.ts
+++ b/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover_histogram.ts
@@ -32,7 +32,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const log = getService('log');
const queryBar = getService('queryBar');
- describe('discover histogram', function describeIndexTests() {
+ // Failing: See https://github.com/elastic/kibana/issues/176882
+ describe.skip('discover histogram', function describeIndexTests() {
before(async () => {
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional');
await esArchiver.load('test/functional/fixtures/es_archiver/long_window_logstash');
diff --git a/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts b/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts
index 1a82e4b73b2b..9c654b518d6f 100644
--- a/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts
+++ b/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts
@@ -341,7 +341,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
expect(await titleElem.getAttribute('value')).to.equal(dataView);
};
- describe('Search source Alert', () => {
+ // Failing: See https://github.com/elastic/kibana/issues/176882
+ describe.skip('Search source Alert', () => {
before(async () => {
await security.testUser.setRoles(['discover_alert']);
await PageObjects.svlCommonPage.loginAsAdmin();
From 613d25238b8b742c823647feb181cecb814de258 Mon Sep 17 00:00:00 2001
From: Jean-Louis Leysens
Date: Tue, 12 Mar 2024 15:44:29 +0100
Subject: [PATCH 059/100] [HTTP] Assert subset of CSP directives for serverless
(#178411)
## Summary
On serverless tests it would be useful to assert that a base set of CSP
directives and values are present.
## Test
Followed instructions in ./x-pack/test_serverless/README.md
## Notes
- Added new dev dependency `content-security-policy-parser` to ease
comparison of CSP directives
---
package.json | 1 +
renovate.json | 19 +++++++++++++++
.../platform_security/response_headers.ts | 23 ++++++++++++++++---
yarn.lock | 5 ++++
4 files changed, 45 insertions(+), 3 deletions(-)
diff --git a/package.json b/package.json
index d791b770ce55..3df92446db83 100644
--- a/package.json
+++ b/package.json
@@ -1532,6 +1532,7 @@
"clean-webpack-plugin": "^3.0.0",
"cli-progress": "^3.12.0",
"cli-table3": "^0.6.1",
+ "content-security-policy-parser": "^0.6.0",
"copy-webpack-plugin": "^6.0.2",
"cpy": "^8.1.1",
"css-loader": "^3.4.2",
diff --git a/renovate.json b/renovate.json
index 724f2a4f0803..70595b721b87 100644
--- a/renovate.json
+++ b/renovate.json
@@ -649,6 +649,25 @@
"Team:Monitoring"
],
"enabled": true
+ },
+ {
+ "groupName": "csp",
+ "packageNames": [
+ "content-security-policy-parser"
+ ],
+ "reviewers": [
+ "team:kibana-security",
+ "team:kibana-core"
+ ],
+ "matchBaseBranches": [
+ "main"
+ ],
+ "labels": [
+ "release_note:skip",
+ "backport:skip",
+ "ci:serverless-test-all"
+ ],
+ "enabled": true
}
]
}
diff --git a/x-pack/test_serverless/api_integration/test_suites/common/platform_security/response_headers.ts b/x-pack/test_serverless/api_integration/test_suites/common/platform_security/response_headers.ts
index 2db41e48db09..75413907fbd3 100644
--- a/x-pack/test_serverless/api_integration/test_suites/common/platform_security/response_headers.ts
+++ b/x-pack/test_serverless/api_integration/test_suites/common/platform_security/response_headers.ts
@@ -6,6 +6,7 @@
*/
import expect from 'expect';
+import cspParser from 'content-security-policy-parser';
import { FtrProviderContext } from '../../../ftr_provider_context';
export default function ({ getService }: FtrProviderContext) {
@@ -13,7 +14,7 @@ export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
describe('security/response_headers', function () {
- const defaultCSP = `script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline'; frame-ancestors 'self'`;
+ const baseCSP = `script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline'; frame-ancestors 'self'`;
const defaultCOOP = 'same-origin';
const defaultPermissionsPolicy =
'camera=(), display-capture=(), fullscreen=(self), geolocation=(), microphone=(), web-share=()';
@@ -29,7 +30,7 @@ export default function ({ getService }: FtrProviderContext) {
.expect(200);
expect(header).toBeDefined();
- expect(header['content-security-policy']).toEqual(defaultCSP);
+ expectMatchesCSP(baseCSP, header['content-security-policy'] ?? '');
expect(header['cross-origin-opener-policy']).toEqual(defaultCOOP);
expect(header['permissions-policy']).toEqual(defaultPermissionsPolicy);
expect(header['strict-transport-security']).toEqual(defaultStrictTransportSecurity);
@@ -45,7 +46,7 @@ export default function ({ getService }: FtrProviderContext) {
.expect(200);
expect(header).toBeDefined();
- expect(header['content-security-policy']).toEqual(defaultCSP);
+ expectMatchesCSP(baseCSP, header['content-security-policy'] ?? '');
expect(header['cross-origin-opener-policy']).toEqual(defaultCOOP);
expect(header['permissions-policy']).toEqual(defaultPermissionsPolicy);
expect(header['strict-transport-security']).toEqual(defaultStrictTransportSecurity);
@@ -55,3 +56,19 @@ export default function ({ getService }: FtrProviderContext) {
});
});
}
+
+/**
+ *
+ * @param expectedCSP The minimum set of directives and values we expect to see
+ * @param actualCSP The actual set of directives and values
+ */
+function expectMatchesCSP(expectedCSP: string, actualCSP: string) {
+ const expectedCSPMap = cspParser(expectedCSP);
+ const actualCSPMap = cspParser(actualCSP);
+ for (const [expectedDirective, expectedValues] of expectedCSPMap) {
+ expect(actualCSPMap.has(expectedDirective)).toBe(true);
+ for (const expectedValue of expectedValues) {
+ expect(actualCSPMap.get(expectedDirective)).toContain(expectedValue);
+ }
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index 2617b1e773e0..67c97fa30385 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -13859,6 +13859,11 @@ content-disposition@0.5.4:
dependencies:
safe-buffer "5.2.1"
+content-security-policy-parser@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/content-security-policy-parser/-/content-security-policy-parser-0.6.0.tgz#b361d8587dee0e92def19d308cb23e8d32cc26f6"
+ integrity sha512-wejtC/p+HLNQ7uaWgg1o3CKHhE8QXC9fJ2GCY0X82L5HUNtZSq1dmUvNSHHEb6R7LS02fpmRBq/vP8i4/+9KCg==
+
content-type@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
From 8939d148339026670c2d4cdc0a93b8b2fb55bc29 Mon Sep 17 00:00:00 2001
From: Jon
Date: Tue, 12 Mar 2024 09:49:02 -0500
Subject: [PATCH 060/100] [ci] Upgrade mocha (#178456)
---
.buildkite/package-lock.json | 150 +++++++----------------------------
.buildkite/package.json | 5 +-
2 files changed, 31 insertions(+), 124 deletions(-)
diff --git a/.buildkite/package-lock.json b/.buildkite/package-lock.json
index 523decc3f270..401f25347ebc 100644
--- a/.buildkite/package-lock.json
+++ b/.buildkite/package-lock.json
@@ -22,7 +22,7 @@
"@types/mocha": "^10.0.1",
"@types/node": "^15.12.2",
"chai": "^4.3.10",
- "mocha": "^10.2.0",
+ "mocha": "^10.3.0",
"nock": "^12.0.2",
"ts-node": "^10.7.0",
"typescript": "^4.6.4"
@@ -529,12 +529,6 @@
"node": ">= 0.8"
}
},
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
"node_modules/create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -772,20 +766,19 @@
}
},
"node_modules/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
},
"engines": {
- "node": "*"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -802,28 +795,6 @@
"node": ">= 6"
}
},
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/glob/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/globby": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
@@ -1082,9 +1053,9 @@
}
},
"node_modules/mocha": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
- "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz",
+ "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==",
"dev": true,
"dependencies": {
"ansi-colors": "4.1.1",
@@ -1094,13 +1065,12 @@
"diff": "5.0.0",
"escape-string-regexp": "4.0.0",
"find-up": "5.0.0",
- "glob": "7.2.0",
+ "glob": "8.1.0",
"he": "1.2.0",
"js-yaml": "4.1.0",
"log-symbols": "4.1.0",
"minimatch": "5.0.1",
"ms": "2.1.3",
- "nanoid": "3.3.3",
"serialize-javascript": "6.0.0",
"strip-json-comments": "3.1.1",
"supports-color": "8.1.1",
@@ -1115,10 +1085,6 @@
},
"engines": {
"node": ">= 14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mochajs"
}
},
"node_modules/mocha/node_modules/ansi-colors": {
@@ -1169,18 +1135,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/nanoid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
- "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
- "dev": true,
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
"node_modules/nock": {
"version": "12.0.3",
"resolved": "https://registry.npmjs.org/nock/-/nock-12.0.3.tgz",
@@ -1271,15 +1225,6 @@
"node": ">=8"
}
},
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -1423,9 +1368,9 @@
]
},
"node_modules/serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"dependencies": {
"randombytes": "^2.1.0"
@@ -2138,12 +2083,6 @@
"delayed-stream": "~1.0.0"
}
},
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
"create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -2301,38 +2240,16 @@
"dev": true
},
"glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
}
},
"glob-parent": {
@@ -2529,9 +2446,9 @@
}
},
"mocha": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
- "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz",
+ "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==",
"dev": true,
"requires": {
"ansi-colors": "4.1.1",
@@ -2541,14 +2458,13 @@
"diff": "5.0.0",
"escape-string-regexp": "4.0.0",
"find-up": "5.0.0",
- "glob": "7.2.0",
+ "glob": "8.1.0",
"he": "1.2.0",
"js-yaml": "4.1.0",
"log-symbols": "4.1.0",
"minimatch": "5.0.1",
"ms": "2.1.3",
- "nanoid": "3.3.3",
- "serialize-javascript": "6.0.0",
+ "serialize-javascript": "^6.0.2",
"strip-json-comments": "3.1.1",
"supports-color": "8.1.1",
"workerpool": "6.2.1",
@@ -2595,12 +2511,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "nanoid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
- "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
- "dev": true
- },
"nock": {
"version": "12.0.3",
"resolved": "https://registry.npmjs.org/nock/-/nock-12.0.3.tgz",
@@ -2659,12 +2569,6 @@
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true
},
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true
- },
"path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -2741,9 +2645,9 @@
"dev": true
},
"serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"requires": {
"randombytes": "^2.1.0"
diff --git a/.buildkite/package.json b/.buildkite/package.json
index 0321711b7480..be91750b4e79 100644
--- a/.buildkite/package.json
+++ b/.buildkite/package.json
@@ -6,6 +6,9 @@
"test": "mocha",
"test:watch": "mocha --watch"
},
+ "overrides": {
+ "serialize-javascript": "^6.0.2"
+ },
"dependencies": {
"@octokit/rest": "^18.10.0",
"axios": "^1.6.3",
@@ -21,7 +24,7 @@
"@types/mocha": "^10.0.1",
"@types/node": "^15.12.2",
"chai": "^4.3.10",
- "mocha": "^10.2.0",
+ "mocha": "^10.3.0",
"nock": "^12.0.2",
"ts-node": "^10.7.0",
"typescript": "^4.6.4"
From 479b29909ee54b97d5631a16cf916f6dfad25d0e Mon Sep 17 00:00:00 2001
From: Dominique Clarke
Date: Tue, 12 Mar 2024 10:54:14 -0400
Subject: [PATCH 061/100] [SLOs] add filters to group by cardinality query
(#178412)
## Summary
Fixes https://github.com/elastic/kibana/issues/178341
Adds filters to cardinality to accurately estimate cardinality for the
given indicator params.
### Testing
1. Navigate to the SLO form
2. Choose a group by value for your given SLO
3. Add a query filter that should reduce the number of instances
4. Observe that the cardinality count is reduced
---
.../slo/use_fetch_group_by_cardinality.ts | 42 +++++++++++++++----
.../components/common/query_builder.tsx | 2 +-
2 files changed, 34 insertions(+), 10 deletions(-)
diff --git a/x-pack/plugins/observability_solution/observability/public/hooks/slo/use_fetch_group_by_cardinality.ts b/x-pack/plugins/observability_solution/observability/public/hooks/slo/use_fetch_group_by_cardinality.ts
index 06196476e6cb..db791c3ba5b4 100644
--- a/x-pack/plugins/observability_solution/observability/public/hooks/slo/use_fetch_group_by_cardinality.ts
+++ b/x-pack/plugins/observability_solution/observability/public/hooks/slo/use_fetch_group_by_cardinality.ts
@@ -4,13 +4,15 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-
-import { ALL_VALUE } from '@kbn/slo-schema';
+import { useCallback, useEffect, useState } from 'react';
+import { debounce } from 'lodash';
+import { ALL_VALUE, QuerySchema } from '@kbn/slo-schema';
import { useQuery } from '@tanstack/react-query';
import { lastValueFrom } from 'rxjs';
import { useKibana } from '../../utils/kibana_react';
+import { getElasticsearchQueryOrThrow } from '../../../common/utils/parse_kuery';
-export interface UseFetchIndexPatternFieldsResponse {
+export interface UseFetchGroupByCardinalityResponse {
isLoading: boolean;
isSuccess: boolean;
isError: boolean;
@@ -29,13 +31,29 @@ const buildInstanceId = (groupBy: string | string[]): string => {
export function useFetchGroupByCardinality(
indexPattern: string,
- timestampField: string,
- groupBy: string | string[]
-): UseFetchIndexPatternFieldsResponse {
+ timestampField: string = '@timestamp',
+ groupBy: string | string[],
+ filters?: QuerySchema
+): UseFetchGroupByCardinalityResponse {
const { data: dataService } = useKibana().services;
+ const serializedFilters = JSON.stringify(filters);
+ const [filtersState, setFiltersState] = useState(serializedFilters);
+
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ const store = useCallback(
+ debounce((value: string) => setFiltersState(value), 800),
+ []
+ );
+
+ useEffect(() => {
+ if (filtersState !== serializedFilters) {
+ store(serializedFilters);
+ }
+ }, [filtersState, serializedFilters, store]);
+
const { isLoading, isError, isSuccess, data } = useQuery({
- queryKey: ['fetchGroupByCardinality', indexPattern, timestampField, groupBy],
+ queryKey: ['fetchGroupByCardinality', indexPattern, timestampField, groupBy, filters],
queryFn: async ({ signal }) => {
try {
const result = await lastValueFrom(
@@ -45,7 +63,10 @@ export function useFetchGroupByCardinality(
body: {
query: {
bool: {
- filter: [{ range: { [timestampField]: { gte: 'now-24h' } } }],
+ filter: [
+ { range: { [timestampField]: { gte: 'now-24h' } } },
+ getElasticsearchQueryOrThrow(filters),
+ ],
},
},
runtime_mappings: {
@@ -76,7 +97,10 @@ export function useFetchGroupByCardinality(
retry: false,
refetchOnWindowFocus: false,
enabled:
- Boolean(indexPattern) && Boolean(timestampField) && Boolean(groupBy) && groupBy !== ALL_VALUE,
+ Boolean(indexPattern) &&
+ Boolean(timestampField) &&
+ Boolean(groupBy) &&
+ ![groupBy].flat().includes(ALL_VALUE),
});
return { isLoading, isError, isSuccess, data };
diff --git a/x-pack/plugins/observability_solution/observability/public/pages/slo_edit/components/common/query_builder.tsx b/x-pack/plugins/observability_solution/observability/public/pages/slo_edit/components/common/query_builder.tsx
index db3b8239c511..63252f228615 100644
--- a/x-pack/plugins/observability_solution/observability/public/pages/slo_edit/components/common/query_builder.tsx
+++ b/x-pack/plugins/observability_solution/observability/public/pages/slo_edit/components/common/query_builder.tsx
@@ -35,7 +35,7 @@ export function QueryBuilder(props: SearchBarProps) {
return (
<>
-
+
Date: Tue, 12 Mar 2024 07:57:34 -0700
Subject: [PATCH 062/100] [DOCS] Add alert creation delay in Stack rules
(#178461)
---
.../alerting/create-and-manage-rules.asciidoc | 2 +-
...-types-tracking-containment-conditions.png | Bin 148726 -> 157849 bytes
.../images/es-query-rule-conditions.png | Bin 211147 -> 0 bytes
.../images/rule-types-es-query-conditions.png | Bin 188284 -> 218374 bytes
.../alerting/rule-types/es-query.asciidoc | 5 ++++-
.../rule-types/geo-rule-types.asciidoc | 5 ++++-
.../rule-types/index-threshold.asciidoc | 3 +++
7 files changed, 12 insertions(+), 3 deletions(-)
delete mode 100644 docs/user/alerting/images/es-query-rule-conditions.png
diff --git a/docs/user/alerting/create-and-manage-rules.asciidoc b/docs/user/alerting/create-and-manage-rules.asciidoc
index 670e531350d5..6f3b418deabb 100644
--- a/docs/user/alerting/create-and-manage-rules.asciidoc
+++ b/docs/user/alerting/create-and-manage-rules.asciidoc
@@ -55,7 +55,7 @@ Each rule type provides its own way of defining the conditions to detect, but an
For example, in an {es} query rule, you specify an index, a query, and a threshold, which uses a metric aggregation operation (`count`, `average`, `max`, `min`, or `sum`):
[role="screenshot"]
-image::images/es-query-rule-conditions.png[UI for defining rule conditions in an {es} query rule,500]
+image::images/rule-types-es-query-conditions.png[UI for defining rule conditions in an {es} query rule,500]
// NOTE: This is an autogenerated screenshot. Do not edit it directly.
All rules must have a check interval, which defines how often to evaluate the rule conditions. Checks are queued; they run as close to the defined value as capacity allows.
diff --git a/docs/user/alerting/images/alert-types-tracking-containment-conditions.png b/docs/user/alerting/images/alert-types-tracking-containment-conditions.png
index b328bb05dd0d60c45fc258bd2264d030108399fa..1ff0a03b8551260170b87b3d5d42041f5ecee6c2 100644
GIT binary patch
literal 157849
zcmeFZXIGQax;3m=P!v#UN{fp0-g}cK9qFM;3BC6oQ4#6VJ1EjSgbo1&0f7M0OMoay
z=!BL82!to@bI#uGbM_B-KfE6@#u~ZTxL3W}oHL2i(NZBLp(VL;4SFXdZ
zT)Am{>n7nFr$r0El`B^r9TgOGR238+>v*}_Il6$ZTwzP}P3%&C{*rP)7XO-!`BqHY
z%_l^}+=55M()?-smdUOeXG1}-
z7&c@X%eaU20L)!vS*7I4m+Es1rfUT?`};u^c*Q*Uhwfh0ta%jW;&%;*K(7aZzZGvO
z$SpO}3^wpitWRPLw-=H_e9w0;>)zk#%i?Kda@>6H7+&=_N4oKDpJ>l&@m=OceY3OQ
ztbMrr#Z9yeQumcV2@XTtBGjFF7=>S}VDY1=Fbyn&C+QW6r?I^({!SklFQ!OAQm>Zt
z@QyCUgP5eFcZyLIi8YVelN3P-^(<-{qe$RpozMB|qrJf5Z{t7j>UF5mzxtI5C%r8k
zk$%^}$L`=x*qjshvJ#!sXOyA
zssY&_`FXz{-K}mbP2M`W_SniC{6qAMEMf1(K*p+enwnQQ2<=-}u0}duxlU+ZC46WJ
zpDS00J`w%TH`igGuKiE@rtzPL11_A-SFXriQB{=J54gIMOWZQ0Nb_E0hlC^g1(p2Q
z>Q7Hag6`j-(y4vor^M9-72RP7Hu`2!_xO!*?UgrkwRhMiC6@X6o9
z|Fc8V?N5B_$ghn5KD+;ZEEh!~XJxoT`g%C>e@*|tI=oEe%M^wV#(?X?IQtVos@H8b6N
zc=a9|)t?b`C(T&@eT3LQBVf+&^v0&JM0~tPzVWt)>qbK*w7TUmE9FQ1Qgyq(h_KTX
z+nw)T&fmVLE9l9bP6;BnDtJUID(lr8=*i?>1+sKs)Je_q%-;NO+xjnqqLd6T(9fWf
z6dFpWBa*#5_qJ8;IzNmlGpI1Mr6+s-n2x9me^zmNSTPu`x;gsp~
z2yU2nEMf5WA`=LgGhpt%cxm7q@1^i>o@4mhpRGji)FqS|)mWHx`Y(mLJLE{W`SH`a
zwODO<`oC(NHuTOuHzW!do;91y3G6Rhwq(x9(|i7@^tK0>(ig2G_HPdMl{kw|3JGLs
zmm~H}opns=s1mr}OCCN>wmUo9;087Q$xrm3e5zd0{S%a|;LeY0uq4?_zIH@dJ}?xz
zL)~F|-b*BS*un%Gny$#+!^)aCrbDFiTG*)UB5qzFv)!|`WiA>P9V-k>$LS}qa(Z9-
zC#VK202l8AH;WSOwx()E0N``0t*J5_GTF*}M|hKOYXi?uxO++VZIsrrp-{HCcX6h$
zbDAcu1PHz`v6J4O3ya|v5pCb;NOqj5ECX6aP?^=of@ydyTr5Ie8!`nz<(Y!^@tOQK
z#V<2PAzyFOWyFa%*-H5Cyb@V%QSB#$u~)|%q9gYCV8$$4``{|L`)rRSPdt+)Bh|xZ
zr5L2$tht|-1T|HcK?Q^6Fhi5}Hvo1t;7k37R>Ne9ZSLm9MK3oylcvSxsR~ok`=ZHl
z?!}sdy^#rg<+F~Hox&B>ZRPVp+f^_TxC_Wc2q99}w$hUyCXgU?X#8r1PSnvFGiQVC
zwxPOxzSoW#;jHOIPG9WILtIU>cR@xaqc<%~ms}?8ioMt48DpYz);YKNE~}ac=KMrv
zB?meJk2HL79@UmzdG?PM8a7#qy-Ubgs?m0zw|vh}{6~UOT`2Q58;Wo8YA2@d?M$0G
z?M<#7n?0)G?2_Qii{`+is%B`@=W}~lh81$`a`d}erQa@E(;SX8X>@Y*bD0;I;duYj
zEczEd;JA(zmLQAIcy6`1cY6Skek)%pFgg$)VTB|(nu9&1s-JT$o;IkkCGW9nyR}p!
zt#7_`m-C~&bDpS&(%ERPNx=~?xxWKKK3y=j-MDZ=0Gzv(gqwBI!bzK6=Dv>4SeM%j<#gYh8c_>lRK{a-3}XUC6_I8>J?
z!TD}LuQhZlR4|w-TTBWnr{7}3F|?YGLegBt;GBlbtq}V
zyJ#-l!p?%~ANjp-pA7v@VHbyXw%6}Qtd9xylFR-$7x8Z@oA-glPCO8o4yW3Q90YHE
zp|X#4&2GNi$QOJ*PHbbEVeWHKgj~kmB)0f%?!WA`(B$YEFLwA)a4+}v+RELI6C#w&
zGjw;MDj-{OuLFKJ_@HP?AsnZh421IJo1)Y+UfX7
zhL#AzMbQ1sCY>ku`4=AJ+HM#4)5XZS^n7iS^V)2_U*?m}UDuu;O@|ZTMA)RVGeE_d
zlsjDFC5m@?7xHytuHFS7h=V^yMT7Um?Xy;ik3|W#6(x>tfWT-h!!lDueAkCKc^Zd)
zytU?JN7sQ*sf;qyRiIf}1`~Ktx`hjwGIm
zV^XX_?z!5VHpp&w>G&|ii=v+<0>4l_o_eZM*-Cr^xzqcQmJ2h7`B&|Ty>>k7)N?x8{
zXqVPkhPc=i8vh`k%3BIn3}Y)UPFT{eD{RT#jQD7LTZ
zWWGrBX)(Z~W%sTh9gTHeM`mk&qEw8e53;qLQ0HxB`^*&+o3Zw_xoUcnaS5YZ!KH^;
z&j}9S4E}Ca*8&v`dz0=i0m?j-zI+oi62+QpjmL>z201h~!ri(icc5dPb*UhZ)$N(X
zYMXUwSe)q6R-;jbQWPcNB0+N8Iln$FmPz+Tsd;&5d9I=2p+OB5d$KyGbGx~p>-u!C
z87Ol?=6L^$-9WC1{c)_vItrAv=UW0wKjc}8}+a?KF6udI0?5&|e6Vo+7UifV~6$8bty
zwPV*ZaTaGyn}~TD{a*>YvDPgI+Ts*j-2hcbmbFYutIg{mpv3c5@%SDt(t*!oG5`l4
zb&3W_>>Xa(hfY=0DJ;SoBvCRrfNj`?u!$p!deqx9Mq1n|FIuWTL~?7xCa(ClfqvN8
zru}3MA~6vpzOo;NBqUu`8)eTYog+q=63Chi@2DTYH~8%kG0K)Hb|8&n5{Xxe9##P?
zkjor@fR7BL2)T|;Je@~D>&lRG{pjVwwi}<3rFW?9S>O>e8;aQjSyOSohq;(p>-N$GJ(o?r1eG$}6jksy!FjSNZ`Dgyy~J;RB=JfA*U
zxPDQly)gA>AqAjeOVD$xwD)M|nglJ1FFUm<>fSwOo&fs|e8=#_^ExmL|8Q2922*
z-*Ld=wJhtPD-A7s?h$(gl5M+3LvhAH7iPy)zjc?QQM?fv9bL%}d1-C#
zfAOhOtIBz(@0GG4E9?D#WpHv|Z;KTH<8IOg>2dX@*oA>ISL_5LAU|mu>2vNy0OL7c
zQp+|kdIc{m`pvhdZcYYUGUbC_7LZqcN^sDemHPE9`Ad?W&raPy{xLQGceX^{!w4Gl
z74g^D8_cdl_6xhsOSXn4WdXD44}~_;3I*C3H2rhjE*Pn@ziXRH4A*K5g{-B{(z46w
zt##r6`}8#>?@RWEErIke+eg-fe)_E6t(f)MT%iYGR`wgxK#e=kDWE}^7m}nvHBn$J
zb;a-GFPB-6#;HjnO4+#xT3zNni0&Ah_@ee~e1eSMYha6q)t2L7ea+PmpKsJk!PI{Z
zQvR#-c+5$ZH?i}TRWoCvGN&HaZ$SGDd_CGICb7$TRAOD3PDH4EE|rc>bosj}^HB_M
zr;tgNR)N8+E%SYrS(B1q!KmpGQ%xPu!dJ<@lcaCm$keSn&$c+*%Ps1ULfQEXM!&$S
zyD%J+)#j${5_YcczOC}2%hrVt?Dv)cdp7Ry{MK6ws_L!dss
zg{JadHWvh<8W-m-=&t_Z8BrSD&rLQ=D?Q2mA!NiS8S5
zej^jxd*}|*0QM3xhR9;@CB<_pRf&WJ7&~kJ!wk!|?&z8AvXb+$Jlr#s5DK`yDIJ8q
zEmgFzs{&v#?L9TBou1l;R|yDfG(pDR(N%Y`3<5h04VFpBSF7&AvOoJN5p3{pTyt|rrgzLIIg?H@t?CWs8NS|%?n^vtV*raJ}EVVD9wh+VS
zKpt?Wm0K9d08uxAWE>iIEa?|&YA%K9n$VSE)m?k3ZORpf<(&ZVO4;`Y0Qk^x;yHzh
zoE#{{VF77iWJ#0Ji4BA9yty?P_Tzk4l<$7{UjT)Y{Hw;S?JQ{JQH>jdxfeDJ6KL?A>ZV{gr0VUx`AKaVr>1$kZN*31vo-G35R!(i
z>55>o8VceNx-V4}CmKpx4U?L8LVy1v)_}J83XZfrKd=nIKhh3g8?!}(24^j`?@^uH
zuMDVvn%rYQZ7{rrxz>JY`$GjXY@}Ak$_N&7Tx)$#N;fx+_d5vby-`)VHDUPMAG0%`
zD1&ZVc2Z~B3tJ0c=uOs^THz-9wAm>y;I?@3EMmUYsKDr&G;)J!B!VU<+Zd$3)6j?thBVMP^qv+UUe^tGv0G3Xk^+b<1IOdsc^I20GVOb+?1)S
z2uJ7^$$(l3mHAo?mquq}OuS2%dCWH}?NhXE%k!-UJ#CSayn6k>tp{bJSQI4RaiXxU
zdH?kt?4^vI(HuT;VVxbD;Z;-BxL_mp?3+(lo{y=*tm-9Vg_d`-RTr{7It!JBMqYj0mI8<
z*faU%wy#|lQY4TYq_N-W%RC-e6m;&NMILF(3as{bSiL6?o{>7+zvsQ&YJVe7DeY#X
z^DLQEad+U%(*a&Um=L>uYjFT;uGnK$AW}OR11yQu5>KL1UQ88FE#cb!tthE>69G<`
zAL4K)Vb}e6BAd0;O6T5?Xnz}tc^hUwl9fuCqh;kY$V|h+K5VwqIBPL%;txW7K&(+<
za6Pr@J!FBu(k+5Klj>ngX$9EBVP4PnwJ=%Dmxa>KH0`%2*zLw7j*hz%4&y}Ktnv1!
z2);xw-CZ$?K@il=Yq_>XS2>;zSDbmi#%i}PYnes9Oy_P940;!MRyF|R{9T2E(%-jSSw$_m{h$&-wbHno1m(f||V|CyTO$o&9vP
z5?Dg%&ni=h)W?SS99w%as?joFDfXN%=fY>JZM)7jPyxbz^tAhI+G2L6CwJ3uxyJ`3
zYdyFA0!P_Mi7IMLhkXF&a}%4HN9zGY0>CtO7j)Jy1XYoIiHA`XA!%`DC)SeSH@o^V
z%Zv%9n8F?V&eE)OV8;aejTE4_d->$;!rfKZYx98)@
zO~N1#S!c&0$0B*~(fXKnG@x;E(&U~}6qjS0&)!2SX5Im^IoW{dT&)>jY|&&-kCxPB
zJ1U7xGncmWFt2i$&?$uy(FOSo>M+7eU&xEY83pY$94vHoH*91z2pC9Q;tdm>i_0VJ
z%zEYBBlN8bg(|4Bw|t!93f-^{;^RDNl9v@#S0$U$gzNxA#D=R?q@PG#jXcUy;-82?`8+fNNr50X!TC!
z9zADuwx{ymu7otnmM&tb?o%tTJ+*)IX|qIyAuu4V45D4US*xr6K5Fj8=_8>C9yZN#
z-+WoEX1CzNi=Sz4+~#7&XI|l@R^2Kt-l>*oG5opEoYgG_kHoEwZRr`#4+b0tkhzm=
z3eMG#_?N*Ut0T?V#?a=`UIKg*_1$K(&Qq-%UK(osn}T+8!57X))4vCm)u@2nTG=Af
z6A6Y&qnWA;&%IL&>@%jysrE7&!k|G`gBnY1zRwei7(dWnX+bW~!CadWsaek)Ww*rZ
ze&TMZdVcZC5_YEcofC5T@%S*HGqp64b^R|S?GLVF^D6KQrnIYPg81pYF7MM@{4kuQJMddH1h
zokL+IM5D&wi?T}uFvUwZzI{?P=df^?X(M3DrGY!Sw`&x1Xd&uyKjN>A!#Vv}fv%T*YV5C2L8Z$J204->zzg!nORkL}z}=!x-r
za^+NLlArtT>j|#QI3`g`)>B^lqTJ6WjZ`-I!N0U+GbhKy;K%cqKXW*T^*^vxl(1Pk
z)bTzhzOOBg)?i|O{#j{8uQlaUADtPVPVpqy+q0n3!7NAP5Bx-*X?wA-t-_cPypKb5
zCd9Vk&o;;OSf7_sgD#STRtV?ogr}MZuT9Uw+^Qrq2z5|kTCvMG~a(w((wE`I;$+QlFue!`3xc#XGm|cKkj(x3%at6Al&B2#flB?|ioz(UWA)
zkf*g-=P+JSd4yp#>uWYCm0fhbJQx7D2_E|&tn7<%)|jD5O{e?GCC@j0Ov@>J_4xGo
zx}k-*rFoLNuC}+o5Kr95Lo;%T7vgsAlZ(m)^eY
z^-u3)<1^ga(uY0{HuScD(%zo3$-2DM^IOeRIB+VddyE@3`7~WSY5K)>Z*ia9(|7wl
zt}J>8VjLfOu$GS83*L({$g$HDJ=pWDdRWo-I9|q1uF^-b{9$;h<78VT0lmpZ-xh&X
zxIF!9zwdo#zN!tJX>LAsU3M9ZhUvuuZve~1iZYAsgVO9oMl8r>L57yRi`pJej5`CY
zgse)Y;zx#{9W2&opC=Ly4aU}Uvib?aT_C;_Tb?NBrMyFD8F4{zt7e{*uy9c8MNMax
zONnn9_H7fvxo0x$lEk#8P-scbcL-ugA$d?tIoshWWiekcb}7n{ck?Z|tQs9__AO0X
zcUzg$V@P+QC77YJzC`^~Juwix8AJ$GTT1GpYr5<60jn%L!`+B68JrZKS@_FcF`<|D
z8Cp=C#81_~+#nA+o*VGlo8otT5|0w}paujIkrgxFTZ8QGK(s_nHmUvvc-(s}$A9lb
z1(!Dn%{fx|ithac?DOC$FX6I1&K22(|1hHkRwP;R-X%4l2U$O2xs%G5I6aI5gg7)I
zs+Ei>y|*0g{}DR_Le5*7HG1EVb2hcUIvWQ)dArB$tPHNjZta+PE8kHz^1>GqWwC9WK%+HFx=Ju9pmMB46i~e
zNR1Mdn3%OmusN3*i(qa+haZh)kx3X!TK)+s!Q=VD+Vc9z&QSRG0t+v~0mRU80qeh+
z`Jx-^ir1C%9{>Ky80SW+!?ZkE+#Hv0TE4
zAm8mQbN_j9p)LaM=v37zi|>lU?zH}v8$Q3oZ9T3H}I4p6y|C7{Vnx-DJfy&soQOYZ3{<%t<=R`j)sOdSR8owF~5uQ)-j$
zi+8HoGwp#hE>;6~sPd|z_L4;+8o(!pMix|6ue6|uJAKxHQrfF=A_DM62gV@BlH9Pg
zMBdKFj|lw07_I-JBn9k4;+KvHv%QuhMsKw6Y_|7U`wxvwS~uxODV8!l1q-NeQ7AfK
z>)(#1Py5vk9D~J|ukUB-cRV5eXN`h9wJCN>H)ZY0O(RSjJ9t7;J;&2xt{*f$8}3^}
zu0PE(8CbURy8QX1SSiM}>e{(h@tJ_qBmt{;sBXpFJo?d_@Sgdo=MqA@t}lM_=^AX#
z^OvFHkly4CP~T*&l>!r3uNmQKL{C>Ym*>8)NwrVU1wWZb3|(Q7&5{{
zF8iw7phDsdD1H+)8H{+bmOyDsVAV#i8%3;E*Y(pPKXwu;H8E&H8Dv7<5oj#KJm#Ol
zhCu3~Z@Qm#sca?Z9Gf+1MadeUWxHKqe7Bc-=>vY^i#=E4q#}Nqy2q)uzwVQ7x}bjR
z;N+aL)9BAT`PJmnOpPUi%cNm$F=P@QwULE6pMl#vz~STcv?Y7Z0=@?JUurx=4>=r27`ywr7Oudvf`#tP6Wg@obX*TPZ;K
z!+Y(j$t<5+hn{;yGWZ`*nma_bntnN5t
zf3i(A8hLl5H;ZvHawND5H4AWSm*i|}l
z*2fXpNo{iB`kSN=mS)$DmF!r&&JQj|$}6gqRFgWsxi0vueh=|=4bpyLdpov=>j4e%
z-+A@D7oWB=&aYEe+Odk!ZWsw!&Qq^9bEjoWJXv#aWz(bGoc
zlJuM*1d2!G8gD#)Uy1-nOFK6kKcZGGB#<~KHX4l|t+vw=-
z5GvXwRLx{kX^x*py$Kb!Z5CI}fob!yupd4@#01G^F{w5gMd?{D7pwcdX!z|a71Lu7
zenfQXBgB4fhCr{9)f+nZJ*G3+wqggZepvWbpcJ#B$V~Px-%ddGe=@!9ff0Xsn%%r8
z#a2Ns2*lcQ(7EWqrLa4CRG1sSUr*OFs?FPNgU-57>KUCIZHBvTc=ibhrpahmmZV{2
z*NWip@L<7mQ+9nJZr=Qfg}l{KNw=zfcE&)5+QhCBKJm?OSCQ{l6YdbUz>Kr6bANGC
zndH0mgXx!MMZE;TA&ISR4&Z&97MQt#V;E4V4p9}>aD@e%K+fGC=Xo
zKS`NC3ER*uu4WPltuV=@)xzgc$)mj!e&jcbn<@9n=8|qq5H`?OOZ@a3iFi*95K`Qj
z_t5%1ly8duVXtRb$b1fXSsWQBYH>jSoS3rexx80l*cw&3GSYL`S5$w2#I4aOLfguO
zQ#1HaR)y@BpUu=}f!e!up;@$}rU<}h9G+mYKHhL{(X26<(;ue7`ZDopT&JQ*3e{w4
zo@Yq9nk*a&%9(bkPhxnQ6TEB^;@aj2nd{qVT4zMYjIjhxhEK;&L{XPKl-U7RNOiEH
zqTfePZIAj{y-SeIa=1zF@A8|us`mNe7q3(ULw<6y)-fsk##`l~0lsm4eQ9zFTD;k~
zX}ZBXn>jRbL=6!A&S
zD647?P;T?K^$sD0%k(I^vMxPm=lDX2SZY_o-8{$TclBy1i2a+f+V+XG5XwV(Lg<`qACnJH=eX0QYN(n_P5`)nO^EP;JAp0xtVgJ>
z%dEy(li^DH)CdB1?lNQUzm${XSM6%!?MkO-id#*Pg%Ox!o2@@GlBu%QMpX1!->~Wv
zL6~A?CvGoTaB{i%4%o~gx4mX-2~y9PdiYc=tX5{Y!D~YUXJ48B)u8IR>stxB41$ex
zu;qMHNrh4-a1-P{upIGWSTlC8;}ikxn